簡體   English   中英

UISplitViewController:在iPhone 6 Plus上旋轉崩潰

[英]UISplitViewController: Crash on rotating on iPhone 6 Plus

我在iOS 8上使用UISplitViewController時遇到問題。

特別是在旋轉屏幕時崩潰,這只發生在iPhone 6 Plus上。 我假設它發生在控制器試圖拆分/合並視圖控制器時。

我的導航堆棧可能有點復雜,拆分視圖的左側和右側都有一個UINavigationController。 在切換到正確的堆棧之前,可以在左堆棧上推送幾個項目。 它與默認的郵件應用程序非常相似。 在您選擇郵箱的位置,打開文件夾並瀏覽左側堆棧中的郵件列表,並在右側堆棧上顯示郵件和打開附件等。

通過使用Show (eg Push)推動左側堆棧和Show Detail (eg Replace)我能夠配置和連接不同視圖如何使用除了storyboard配置之外的任何操作。

點擊周圍(並填充正確的堆棧)后,在iphone 6 plus上旋轉將使應用程序崩潰。 我意識到這是因為這是唯一一個擴展和折疊雙方的設備。 調試器沒有給出真實的信息,我有時得到的只是:

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

注意它在哪里說UIView ,這似乎是隨機的(NFCString,NSArray等),所以我認為它意外地為零並且指向堆上的隨機代碼。

我也意識到這與UISplitViewControllerDelegate方法有關,但我無法弄清楚我應該做些什么來使它工作。

我遇到過同樣的問題。
我的崩潰是由於在UISplitViewController的子類中的viewDidLoad中設置leftBarButtonItem引起的。 我刪除了這兩行代碼。

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

現在我在prepareForSegue中設置leftBarButtonItem。 這就是Apple在Master / Detail示例中的表現方式;-)

“我也意識到這與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。

我希望這可以幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM