2012-04-24 9 views
4

5つのsplitviewcontrollersを含むタブ付きアプリケーションがあります。SplitViewControllerがポートレート表示(ipad)でクラッシュする

ポートレートモードでは、「マスター」ボタンが期待どおりに表示され、最初の2つのコントローラーではボタンが期待どおりに動作します。 、/SourceCache/UIKit_Sim/UIKit-1914.84/_UIPopoverLayoutInfo.m:160 2012- - [:arrowDirection _ UISlidingPopoverLayoutInfo _popoverViewSizeForContentSize]

アサーション失敗:ただし、ボタンは次のメッセージでクラッシュを引き起こす最後の3つのタブに4月24日19:15:38.674 SMToolkit [12420:11303] *によりキャッチされない例外にアプリを終了 'NSInternalInconsistencyException'、理由: '_popoverViewSizeForContentSizeに渡さ不明方向:arrowDirection:'

シングは、5つのビューがあり、あります同じソースからカットアンドペーストされた、かなりAppleの定型文。私は実際にpopoversを絵コンテないんだけど、でもspliltviewcontrollerは理論的には「自由のために」私には彼らに与えますので、私は、prepareforsegue方法でそれらを持っているん

全5 splitviewcontrollersがUISplitViewControllerDelegate

に準拠appdelgateはそうのようなものです:

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; 
    //Person 
    UISplitViewController *personSplitViewController = [tabBarController.viewControllers objectAtIndex:1]; 
    UINavigationController *personNavigationController = [personSplitViewController.viewControllers lastObject]; 
    personSplitViewController.delegate = (id)personNavigationController.topViewController; 
    UINavigationController *personMasterNavigationController = [personSplitViewController.viewControllers objectAtIndex:0]; 
    PersonMasterViewController *personController = (PersonMasterViewController *)personMasterNavigationController.topViewController; 
    personController.managedObjectContext = self.managedObjectContext; 
    //Scene 
    UISplitViewController *sceneSplitViewController = [tabBarController.viewControllers objectAtIndex:2]; 
    UINavigationController *sceneNavigationController = [sceneSplitViewController.viewControllers lastObject]; 
    sceneSplitViewController.delegate = (id)sceneNavigationController.topViewController; 
    UINavigationController *sceneMasterNavigationController = [sceneSplitViewController.viewControllers objectAtIndex:0]; 
    SceneMasterViewController *sceneController = (SceneMasterViewController *)sceneMasterNavigationController.topViewController; 
    sceneController.managedObjectContext = self.managedObjectContext; 

などなど、詳細ビュー・コントローラに続いてtabBarController

に正しいインデックスを置き換えて、それぞれが次ました(同じ、私がチェックする):

- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController 
{ 
barButtonItem.title = NSLocalizedString(@"Master", @"Master"); 
[self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES]; 
self.masterPopoverController = popoverController; 
} 


- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem 
{ 
// Called when the view is shown again in the split view, invalidating the button and popover controller. 
[self.navigationItem setLeftBarButtonItem:nil animated:YES]; 
self.masterPopoverController = nil; 
} 

上記の「人物」は予想通りに動作しますが、「シーン」によってクラッシュが発生します。

barbuttonitemをクリックしてストーリーボードに表示されないときに何が起こるかについて話しているものはどこにも表示されません。

アイデア?

+0

これはどのようにしてこの仕事をするのですか?もしそうなら、どうですか?私はまったく同じエラーがあります。 –

答えて

2

私の場合、答えは私たちのコードにかなりばかげたバグがあることでした。

私は、マスタービューのviewWillAppearではdetailviewにいくつかのものを設定していましたが、マスタービューを表示しようとしていました。それを取って、それぞれのビューコントロールだけで問題を解決しました。

+0

あなた自身の答えを受け入れたものとしてマークしてください。 – Danra

1

エラーは少しわかりにくいです。私は誤って [UIPopoverController presentPopoverFromBarButtonItem: permittedArrowDirections:]を2回連続して呼び出していて、2回目の呼び出しはポップオーバーがレンダリング/アニメーション化されているときに同じエラーが発生します。

0

アサーションエラーは、どのメソッドでもnilが返ってこない場合にのみ発生します。だから、すべての変数のために自己を設定し、ゼロをチェックするように提案したいと思います。

関連する問題