2016-08-04 4 views
0

自分のiPhone 4でXcode 7.3.1を使用して元の(Objective-C)Master-Detail Applicationテンプレートを実行したときに、そのデバイスで最新のiOS(7.1.2)が実行された場合、クラッシュします。おそらく、iOS 9.3に設定されているBase SDKを変更することはできませんが、適切なアーキテクチャと展開ターゲットを使用しています。なぜクラッシュするのですか?iOS 7.1.2を実行しているiPhone 4でMaster-Detail Applicationテンプレートがクラッシュするのはなぜですか?

コードをクラッシュ:

- (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]; 
    /**CRASH**/navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem; 
    splitViewController.delegate = self; 
    return YES; 
} 

デバッガは言う:

2016-08-04 21:14:26.240 Master-Detail-Application-2[766:60b] -[MasterViewController topViewController]: unrecognized selector sent to instance 0x16d61c20 
2016-08-04 21:14:26.246 Master-Detail-Application-2[766:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MasterViewController topViewController]: unrecognized selector sent to instance 0x16d61c20' 
*** First throw call stack: 
(0x30dbef83 0x3b56fccf 0x30dc2917 0x30dc1203 0x30d10768 0x396a7 0x3364b587 0x3364aedb 0x3364556b 0x335e16e9 0x335e0851 0x33644ca9 0x35bf9aed 0x35bf96d7 0x30d89a67 0x30d89a03 0x30d881d7 0x30cf2ebf 0x30cf2ca3 0x33643ed1 0x3363f14d 0x3a945 0x3ba7cab7) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 
+0

'topViewController'は、' UIViewController'ではなく、 'UINavigationController'のメソッドです。 – rmaddy

+0

@maddyこれはコードから見たものですが、それは正しいです。 –

+1

しかし、エラーは 'UINavigationController'ではなく' MasterViewController'で 'topViewController'を呼び出そうとしていることを示しています。 – rmaddy

答えて

0

問題がここに存在している:

UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 

を参照してください、あなたはビューコントローラスタックからnavigationControllerlastObjectに割り当てます。 UINavigationControllerのインスタンスではありません。

受信者が処理できないメッセージを送信すると、例外とランタイムがクラッシュします。 navigationControllerのクラスがデバッグしようとしていて、UINavigationControllerタイプでない場合は、topViewControllerメッセージを受信できるように修正してください。

+0

これは私が言及したような標準的なテンプレートなので、Apple Inc.が提供するコード(/ ** CRASH ** /コメントを除く)であり、Simulatorで動作します。私は変更したり、他の場所に何かを追加していません。私の場合、それは箱の中からクラッシュする。 –

関連する問題