gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:45:43 26 4
gpt4 key购买 nike

我正在尝试从 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;
}

重现错误:

  • 打开 xCode 6
  • 文件 > 新建 > 项目
  • 选择“iOS 应用”下的“Master-Details 应用”
  • 将项目的目标更改为 7.0
  • 在模拟器或设备上运行

我调查了一下,似乎对象类型在 iOS 7 和 iOS 8 上有所不同:

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

为什么会这样?

最佳答案

将它放在 prepareForSegue: 下以确保向后兼容性。

DetailViewController *controller;
if ([[segue destinationViewController] isKindOfClass:[UINavigationController class]]) {
controller = (DetailViewController *)[[segue destinationViewController] topViewController];
}
else {
controller = (DetailViewController *)[segue destinationViewController];
}
[controller setDetailItem:object];

关于来自 xCode 6 的 iOS Master-Detail 应用程序模板不能在 iOS 7 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com