2016-08-04 2 views
0

내 iPhone 4에서 해당 기기에서 가능한 최신 iOS (7.1.2)를 사용하여 Xcode 7.3.1을 사용하여 원본 (Objective-C) Master-Detail Application 템플릿을 실행하면 충돌이 발생합니다. 아마 iOS 9.3으로 설정된 Base SDK를 변경할 수는 없지만 올바른 Architecture 및 Deployment Target을 사용하고 있습니다. 왜 추락합니까?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 **/comment 제외)이며 시뮬레이터에서 작동합니다. 나는 변화시키지 않았거나 다른 곳에서는 아무것도 추가하지 않았다. 그것은 내 경우에 상자 밖에서 충돌합니다. –

관련 문제