来自xCode 6的iOS Master-Detail应用程序模板无法在iOS 7上运行

Gre*_* M. 6 xcode objective-c master-detail ipad ios

我正在尝试从xCode 6模板开发一个主 - 细节iOS应用程序(仅限iPad).iOS 8运行良好,但在iOS 7.0或7.1上运行会在运行时发生崩溃,我评论过:

- (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];

    // this line throws a "[MasterViewController topViewController]: unrecognized selector sent to instance 0x796dde90"
    navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem;
    splitViewController.delegate = self;
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

重现错误:

  • 打开xCode 6
  • 文件>新建>项目
  • 在"iOS应用程序"下选择"主 - 详细信息应用程序"
  • 将项目目标更改为7.0
  • 在模拟器或设备上运行

我调查过,iOS 7和iOS 8上的对象类型似乎不同:

  • 在iOS8上,self.window.rootViewController是一个UISplitViewController
  • 在iOS7上,self.window.rootViewController是第一个UINavigationController(左)

为什么会这样?

Jef*_*Jef 3

尝试这个替换:

if ([splitViewController respondsToSelector:@selector(displayModeButtonItem)]){
    navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem;
}
Run Code Online (Sandbox Code Playgroud)