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

时间:2013-08-28 05:40:25

标签: ios xcode uiviewcontroller storyboard

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

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

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

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIViewController viewControllers]: unrecognized selector sent to instance 0x7569a80'

在我的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;
}

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

UIViewController *viewController = (UIViewController *)self.window.rootViewController;

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

2 个答案:

答案 0 :(得分:5)

New file-->ios-->user interface---> storyboard

获取故事板文件

在appdelegate中创建@property故事板 喜欢

@property (nonatomic, retain) UIStoryboard* storyboard ;

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

@interface AppDelegate ()
@property (strong, nonatomic) UIViewController *initialViewController;
@end

这是为了引用初始viewcontroller。

然后在appdelegate.m中找到@synthesize storyboard  然后进行导航,您可以在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];

// instantiateInitialViewController表示它在作为根视图控制器的故事板上返回箭头指向视图控制器

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = self.initialViewController;
[self.window makeKeyAndVisible];

答案 1 :(得分:5)

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

示例:您通过转到文件创建新的情节提要文件 - &gt;新的 - &gt;文件 - &gt;故事板文件,您将其保存为“MyAwesomeUI.storyboard”,然后在info.plist中将“主故事板文件基本名称”的密钥更改为“MyAwesomeUI”。

干杯!