【问题标题】:UISplitViewController: Crash on rotating on iPhone 6 PlusUISplitViewController:在 iPhone 6 Plus 上旋转时崩溃
【发布时间】:2015-10-10 17:22:58
【问题描述】:

我在 iOS 8 上使用 UISplitViewController 时遇到问题。

特别是在旋转屏幕时它会崩溃,而且这只发生在 iPhone 6 Plus 上。我假设它发生在控制器尝试拆分/合并视图控制器时。

我的导航堆栈可能有点复杂,拆分视图的左侧和右侧都有一个 UINavigationController。在切换到右侧堆栈之前,可以将几个项目推入左侧堆栈。它与默认的邮件应用程序非常相似。在您选择邮箱的位置,打开文件夹并浏览左侧堆栈上的邮件列表,并在右侧堆栈上显示邮件和打开的附件等。

我能够通过使用Show (e.g. Push) 推送左侧堆栈和Show Detail (e.g. Replace) 来配置和连接不同视图的行为方式,只使用情节提要配置。

在四处点击(并填充右侧堆栈)后,在 iphone 6 plus 上旋转会使应用程序崩溃。我意识到它的发生是因为这是唯一将两侧扩展和折叠到彼此的设备。调试器没有提供任何真实信息,我有时得到的唯一信息是:

-[UIView updateNavigationBarButtonsAnimated:]: unrecognized selector sent to instance

注意UIView 的位置,这似乎是随机的(NFCString、NSArray 等),所以我认为它意外地为零并指向堆上的随机代码。

我也意识到这与 UISplitViewControllerDelegate 方法有关,但我无法弄清楚我应该真正做些什么才能让它发挥作用。

【问题讨论】:

    标签: ios xcode uinavigationcontroller uistoryboard uisplitviewcontroller


    【解决方案1】:

    我遇到了同样的问题。
    我的崩溃是由于在 UISplitViewController 的子类中的 viewDidLoad 中设置 leftBarButtonItem 引起的。我删除了这两行代码。

    let navigationController = self.viewControllers[self.viewControllers.count-1] as! UINavigationController
    navigationController.topViewController.navigationItem.leftBarButtonItem = displayModeButtonItem()
    

    现在我在prepareForSegue 中设置leftBarButtonItem。这就是 Apple 在 Master/Detail 示例中的做法;-)

    【讨论】:

      【解决方案2】:

      “我也意识到这与 UISplitViewControllerDelegate 方法有关,但我只是不知道我应该做些什么才能让它工作。”

      你是对的。我有同样的问题并解决这个问题:

      - (void)viewWillDisappear:(BOOL)animated {
          [super viewWillDisappear:animated];
      
          if (self.isMovingFromParentViewController) {
              // To avoid deallocated problem with SplitVC delegates
              self.splitViewController.delegate = nil;
              // Do your stuff here
          }
      }
      

      换句话说,当屏幕消失时,您必须将 splitViewController 的委托分配给 nil。

      我希望这对你有帮助。

      【讨论】:

      • 这是因为委托是使用 assign(或 Swift 中的 unowned(unsafe))而不是 weak)存储的。这意味着您有责任在释放时将其设置为 nil
      • 我不确定这是不是同样的问题,拆分视图没有从屏幕上删除?它只是在旋转?
      • 实际上,只是旋转。我从不从屏幕上删除 uisplitviewcontroller。
      • 添加了,不幸的是没有影响
      • 很抱歉听到这个消息。 :(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-12
      • 1970-01-01
      相关资源
      最近更新 更多