2016-08-04 24 views
0

Wenn ich die ursprüngliche Master-Detail-Vorlage (Objective-C) unter Verwendung von Xcode 7.3.1 auf meinem iPhone 4 mit dem neuesten iOS (7.1.2) auf diesem Gerät ausführen, stürzt es ab. Ich kann das Base SDK, das auf iOS 9.3 eingestellt ist, wahrscheinlich nicht ändern, aber ich verwende das richtige Architektur- und Bereitstellungsziel. Warum stürzt es ab?Warum stürzt die Master-Detail-Anwendungsvorlage auf dem iPhone 4 mit iOS 7.1.2 ab?

Crashing Code:

- (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; 
} 

Debugger sagt:

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' ist eine Methode von' UINavigationController', nicht 'UIViewController'. – rmaddy

+0

@maddy Das ist, was ich aus dem Code sehe, das ist richtig. –

+1

Aber der Fehler zeigt an, dass Sie versuchen, 'topViewController' auf Ihrem' MasterViewController' aufzurufen, nicht einen 'UINavigationController'. – rmaddy

Antwort

0

Das Problem besteht hier:

UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 

See, Sie zuweisen zu navigationController die lastObject von View-Controller-Stack. Es kann keine Instanz von UINavigationController sein.

Senden einer Nachricht, die nicht vom Empfänger verarbeitet werden kann - verursacht Ausnahme und Laufzeitabsturz. Versuchen Sie zu debuggen - von welcher Klasse Ihre navigationController ist, und wenn es nicht von UINavigationController Typ ist - beheben Sie das, um topViewController Nachricht empfangen zu können.

+0

Es ist die Standardvorlage, wie ich bereits erwähnt habe, also ist es der Code (außer der/** CRASH **/Kommentar) von Apple Inc. und es funktioniert im Simulator. Ich habe nichts anderswo verändert oder hinzugefügt. Es stürzt in meinem Fall aus der Box. –