기존의 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!.rootViewController
은 UISplitViewController
이지만 내 앱에서는 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에 버그 리포트를 보내고 계속 진행할 것이다.
감사합니다,하지만 내 질문은 "왜 rootViewController을하지?" initialViewController로 설정했기 때문에.차라리 기본 동작이어야하는 무언가를 프로그래밍 방식으로 수정하지 않아도됩니다. –
그래서 Debug에서 rootViewController를 검사 할 때 SplitViewController 클래스가 아닌가? –
적어도 iPhone 5 (7.1) 경우에는 맞습니다. –