目前,我有一个带有单个故事板的工作应用程序。工作应用程序基于主 - 详细视图布局。我决定添加一个新的故事板,并将其设置为主要的故事板。当我点击运行时,它将运行并显示一个空白页面,这是我所期望的,因为我没有添加任何视图控制器。
我仍然是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;
因此,我该如何解决这个问题?
答案 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”。
干杯!