2014-12-07 6 views
0

기존의 iOS 앱을 마스터 세부 정보보기를 루트보기로 전환하려고합니다. 템플릿으로 사용하기 위해 Xcode에서 새로운 Master Detail 프로젝트를 만들었습니다. 그러나 동일한 AppDelegate.swift과 거의 동일한 스토리 보드 파일이 있음에도 불구하고 window.rootViewController이 아니며 스토리 보드에 정의 된 initialViewController이 아닙니다.window.rootViewController가 initialViewController가 아닌 이유는 무엇입니까?

의 Info.plist 에서 :

<key>UIMainStoryboardFile</key> 
<string>Main</string> 

Main.storyboard 에서 :

<document ... initialViewController="Z2E-r9-vU1"> 
    <!-- ... --> 
    <!--SplitViewTitle--> 
    <scene sceneID="dlH-f9-ql3"> 
    <objects> 
     <splitViewController title="SplitViewTitle" id="Z2E-r9-vU1" sceneMemberID="viewController"> 

예외가 여기 AppDelegate.swift 발생

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate, UISplitViewControllerDelegate { 
    var window: UIWindow? 
    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    let splitViewController = self.window!.rootViewController as UISplitViewController 

Xcode에서 만든 기본 마스터 디테일 프로젝트에서 self.window!.rootViewControllerUISplitViewController이지만 내 앱에서는 UINavigationController, 특히 마스터보기 용 탐색 컨트롤러가됩니다.

어떻게 이런 경우가 될 수 있습니까?rootViewController에 대한 이해에서 시작시 initialViewController으로 설정해야합니다. 일부 공식 documentation을 인용 :

실행시 아이폰 OS에서 :

  • 이 창을 인스턴스화합니다.
  • 메인 스토리 보드를로드하고 초기보기 컨트롤러를 인스턴스화합니다.
  • 새보기 컨트롤러를 창의 rootViewController 속성에 할당 한 다음 창을 표시합니다.

업데이트 :

이 엑스 코드의 버그처럼 보이기 시작한다. 나는 단지 새로운 Detail Detail 프로젝트를 생성하고 Deployment Target을 7.1로 설정하고 iPhone 5 (7.1) 시뮬레이터에서 실행함으로써 정확한 예외를 재현했습니다. iPhone 5 (8.1) 시뮬레이터에서 올바르게 작동합니다.

업데이트 2 : 저는 Xcode Version 6.1 (6A1052c)을 사용하고있었습니다. 방금 최신 버전 인 Version 6.1.1 (6A2008a)으로 업그레이드했지만 쉽게 재현 할 수있는이 문제가 해결되지 않습니다. 나는 Apple에 버그 리포트를 보내고 계속 진행할 것이다.

답변

1

iOS 버전 8.0 이상에서는 iPhone 용 SplitViewController를 사용할 수 없습니다. iPads 전용입니다.

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISplitViewController_class/index.html

In iOS 8 and later, you can use the UISplitViewController class on all iOS devices; in previous versions of iOS, the class is available only on iPad.

+0

감사합니다,하지만 내 질문은 "왜 rootViewController을하지?" initialViewController로 설정했기 때문에.차라리 기본 동작이어야하는 무언가를 프로그래밍 방식으로 수정하지 않아도됩니다. –

+0

그래서 Debug에서 rootViewController를 검사 할 때 SplitViewController 클래스가 아닌가? –

+0

적어도 iPhone 5 (7.1) 경우에는 맞습니다. –

관련 문제