0

我是 iOS 新手,难以实现拆分视图主从控制器。我创建了一个新项目

  1. 然后使用使用 ARC、Story Board 和 Core Data 的 Master Detail Application Universal 应用程序
  2. 在标签栏控制器中嵌入详细视图控制器
  3. 在详细信息视图控制器之前添加了一个导航控制器
  4. 将标签栏控制器设为初始视图控制器。

现在情节提要如下图所示

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

4

0 回答 0