1

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

我对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;

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

4

2 回答 2

5

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

@property在 appdelegate 中创建故事板,例如

@property (nonatomic, retain) UIStoryboard* storyboard ;

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

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

这是为了参考初始视图控制器。

然后@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];

//instantiateInitialViewController意味着它返回故事板上的箭头视图控制器,它是根视图控制器。

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = self.initialViewController;
[self.window makeKeyAndVisible];
于 2013-08-28T06:01:28.980 回答
5

在 Xcode 7 上,您可以转到 info.plist 并将键“Main storyboard file base name”设置为新 Storyboard 的名称。

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

干杯!

于 2016-09-28T06:09:26.437 回答