我在 X-Code 中启动了一个主从应用程序。我选择了通用、核心数据和 git repo 选项。当应用程序出现时,我进入 iPhone 故事板,添加一个选项卡视图控制器,将其开头的导航/表格/详细视图移动到选项卡控制器中作为第三个选项卡(实际上我希望它成为第四)。然后,我选择选项卡控制器作为程序在 iPhone 模式下启动时的初始视图。它构建成功,但不允许程序完成加载。将出现的错误记录如下:
2013-05-11 21:35:00.302 FearlessAndThorough[6318:907] -[UITabBarController topViewController]: unrecognized selector sent to instance 0x1c592020
2013-05-11 21:35:00.306 FearlessAndThorough[6318:907] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITabBarController topViewController]: unrecognized selector sent to instance 0x1c592020'
*** First throw call stack:
(0x337f33e7 0x3b4ee963 0x337f6f31 0x337f564d 0x3374d208 0xc9e43 0x35662aa1 0x35662625 0x3565a833 0x35602d1f 0x356027ad 0x356021ef 0x3731a5f7 0x3731a227 0x337c83e7 0x337c838b 0x337c720f 0x3373a23d 0x3373a0c9 0x3565946d 0x356562b9 0xc9ab5 0x3b91bb20)
libc++abi.dylib: terminate called throwing an exception
(lldb)
我希望有人以前做过这件事,并且可以让我了解在设置选项卡视图控制器类型应用程序(然后将其转换为 iPad 的主详细信息应用程序)时应采取的正确程序或步骤。
这是当前应用程序委托的 didFinishLaunchingWithOptions:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *navigationController = [splitViewController.viewControllers lastObject];
splitViewController.delegate = (id)navigationController.topViewController;
UINavigationController *masterNavigationController = splitViewController.viewControllers[0];
MasterViewController *controller = (MasterViewController *)masterNavigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
} else {
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
}
return YES;
}
您的问题是,您在 iPhone 故事板的前面添加了一个选项卡栏控制器,但在您的“else”子句中,您说窗口的根视图控制器是导航控制器 - 它不是您添加的选项卡栏控制器是。如果您将登录作为 else 子句中的第二行,您将看到 navigationController 实际上是一个选项卡栏控制器,而不是导航控制器。 else 子句需要如下所示:
UITabBarController *tbc = (UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController = tbc.viewControllers[3];
MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
我不确定 tbc.viewControllers 中的“3”。我无法从您的描述中看出导航控制器位于哪个选项卡中,因此您可能需要更改它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)