我是 iOS 新手,难以实现拆分视图主从控制器。我创建了一个新项目
- 然后使用使用 ARC、Story Board 和 Core Data 的 Master Detail Application Universal 应用程序
- 在标签栏控制器中嵌入详细视图控制器
- 在详细信息视图控制器之前添加了一个导航控制器
- 将标签栏控制器设为初始视图控制器。
现在情节提要如下图所示
http://i40.tinypic.com/2e1ccg9.png
我知道并在一些较早的帖子和 Apple 人机界面指南中阅读过拆分视图应该是根视图控制器,但我也看到了诸如 Tripadvisor 和 Yelp 之类的应用程序!已实施相同的方法,并已获得 Apple 的批准。
我可以在没有核心数据的情况下使其工作,但是当我使用 coredata 模板启动项目时,它似乎可以工作。当我运行程序时,它显示以下错误:
2013-07-11 04:54:44.207 Trial4[21421:c07]-[UISplitViewController topViewController]:无法识别的选择器发送到实例 0x8424990 2013-07-11 04:54:44.211 Trial4[21421:c07] * 由于未捕获而终止应用程序exception 'NSInvalidArgumentException', reason: '-[UISplitViewController topViewController]: unrecognized selector sent to instance 0x8424990' * First throw call stack: (0x1fa7012 0x13e4e7e 0x20324bd 0x1f96bbc 0x1f9694e 0x2643 0x16157 0x16747 0x1794b 0x28cb5 0x29beb 0x1b698 0x1f02df9 0x1f02ad0 0x1f1cbf5 0x1f1c962 0x1f4dbb6 0x1f4cf44 0x1f4ce1b 0x1717a 0x18ffc 0x24ad 0x23d5) libc++abi.dylib: 终止调用抛出异常 (lldb)
所以我认为问题是我必须在 AppDelegate.m 中实现一些代码有人可以帮我解决需要在其中实现的代码吗
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
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 部分;任何可以提供修改ipad代码建议的人:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
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 {
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController = tabBarcontroller.viewControllers[0];
MasterViewController *controller = (MasterViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
}
return YES;
}
这里附上一些我正在努力实现的照片:
横屏模式下 iPad 中 Yelp 的屏幕截图:http: //i40.tinypic.com/11uf1af.png