3

旋轉我在iOS 8.UISplitViewController:崩潰上iPhone 6加

具體來說它旋轉屏幕時崩潰使用UISplitViewController一個問題,這僅發生在iPhone 6加。我假設它發生在控制器試圖拆分/合併視圖控制器時。

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

我能夠通過使用Show (e.g. Push)來推動左堆棧和Show Detail (e.g. Replace)來配置和連接不同視圖的行爲方式,只使用故事板配置。

點擊左右(和填充右棧),旋轉在iPhone 6 Plus會崩潰的應用程序後。我意識到發生這種情況是因爲這是唯一一種將雙方相互擴展和崩潰的設備。有調試器沒有給出真正的信息,我唯一有時得到的是:

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

注意的地方說:UIView,這似乎是隨機的(NFCString,NSArray的,等等),所以我想這是意外地零,並指向堆上的隨機代碼。

我也意識到這與UISplitViewControllerDelegate方法有關,但我無法弄清楚我應該如何使它工作。

回答

1

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

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

現在我在prepareForSegue中設置了leftBarButtonItem。這是蘋果公司在主/從案例中的做法;-)

0

「我也意識到這與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的代表。

我希望這可以幫助您爲我。

+0

這是因爲委託是使用'assign'(或在Swift中是「unowned(unsafe)」而不是'weak')存儲的。這意味着,只要解除分配,您就有責任將其設置爲「nil」。 –

+0

@AaronBrager好的謝謝你的信息 – Beto

+0

林不知道這是同一個問題,拆分視圖不會被從屏幕上刪除?它只是旋轉? –