如何添加新的StoryBoard,并将其设置为主StoryBoard xCode而不会出现错误

Con*_*son 1 xcode storyboard uiviewcontroller ios

目前,我有一个单一故事板的工作应用程序.工作应用程序基于主 - 详细视图布局.我决定添加一个新的故事板,并将其设置为主要的故事板.当我单击运行时,它将运行并显示一个空白页面,这是我所期望的,因为我没有添加任何视图控制器.

我仍然是Objective-C的新手,因此,有许多事情我仍然不明白,这里有趣的部分.

当我在新更改的主故事板中添加UIViewController(并将其关联到UIViewController的子类),然后尝试运行它时,它会显示错误.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController viewControllers]: unrecognized selector sent to instance 0x7569a80'
Run Code Online (Sandbox Code Playgroud)

在我的AppDelegate下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;

return YES;
}
Run Code Online (Sandbox Code Playgroud)

我不太确定我需要在上面的代码中添加什么.我确实尝试了下面的一行也没有成功,

UIViewController *viewController = (UIViewController *)self.window.rootViewController;
Run Code Online (Sandbox Code Playgroud)

因此,我该如何解决这个问题?

pre*_*tam 5

从中获取故事板文件 New file-->ios-->user interface---> storyboard

@property在appdelegate中创建故事板

@property (nonatomic, retain) UIStoryboard* storyboard ;
Run Code Online (Sandbox Code Playgroud)

在.m文件中执行之前写:

@interface AppDelegate ()
@property (strong, nonatomic) UIViewController *initialViewController;
@end
Run Code Online (Sandbox Code Playgroud)

这是为了引用初始viewcontroller的参考.

然后@synthesize storyboard在appdelegate.m然后导航你可以写入didFinishLaunchingWithOptions

 //init storyboard
storyboard = nil;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
{

    CGSize result = [[UIScreen mainScreen] bounds].size;
    if(result.height == 480)
    {
       storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhoneIOS5" bundle:nil];

        NSLog(@"Version < 6");
        // iPhone Classic
    }
    if(result.height == 568)
    {
        // iPhone 5
      storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];
        NSLog(@"Version 6");
    }




    //NSLog(@"IOS 6");
}
else
{
    storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhoneIOS5" bundle:nil];
     //NSLog(@"IOS 5");
}
self.initialViewController = [storyboard instantiateInitialViewController];
Run Code Online (Sandbox Code Playgroud)

// instantiateInitialViewController表示它返回故事板上的箭头指向视图控制器,它是根视图控制器.

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = self.initialViewController;
[self.window makeKeyAndVisible];
Run Code Online (Sandbox Code Playgroud)


小智 5

在Xcode 7上,您可以转到info.plist并将"主故事板文件基本名称"键设置为新Storyboard的名称.

示例:您通过转到文件 - >新建 - >文件 - >故事板文件创建一个新的故事板文件,然后将其保存为"MyAwesomeUI.storyboard",然后在info.plist中将"主故事板文件基本名称"的密钥更改为"MyAwesomeUI".

干杯!