2016-11-07 4 views
2

이유가 var window: UIWindow?이 아니고 UIWindow!이 아닌 이유, 즉 선택 창을 만드는 것이 각 앱에 기본 UIWindow가 있어야하는 이유는 무엇입니까 (앱이 전혀 작동하지 않는 경우).UIApplicationDelegate의 창 속성을 암시 적으로 래핑하지 않고 선택적으로 만드는 이유는 무엇입니까?

this answer은 실제로 UIWindow!에서 UIWindow?으로 변경된 것으로 보았습니다. 이유가 있어야합니다. 나는 이유를 알 수 없다. 또한 UIWindow?을 사용하면 기본 창의 유형이 두 번 선택 사항이되어 정말 어색합니다.

답변

1

UIMainStoryboardFile 키를 앱의 .plist 파일 (기본적으로 추가됨)에 추가하면 창이 인스턴스화되는 이유가 있기 때문입니다.

enter image description here

window rootViewController 의지 스토리 보드의 초기 뷰 컨트롤러를 포함하고,이를 화면에 표시한다.

테스트 해보세요.

window을 사용할 수 있습니까?

시도는 프로젝트의 .plist 파일에서 UIMainStoryboardFile 행을 제거하고 windowapplication(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) 방법 로그온을 시도합니다 :

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    // if your removed 'UIMainStoryboardFile' key from the plist, this should prints nil 
    print(window) 

    return true 
} 
+0

실제로 UIMainStoryboardFile이 사과문을 작성한 것으로 알고 있지만 UIWindow가 없으면 응용 프로그램이 전혀 작동하지 않습니다. 어떤 경우에는 (답변에서 "Test it!"섹션에서 언급했듯이) 키가 존재하지 않을 수 있기 때문에 – Qiulang

+0

의 목적이 무엇입니까?이 경우 창은 0이되고 표시되는 것은 모두 검은 색 화면 –

+0

당신의 요점을 보았지만 당신은 내게 안 보인다. 예를 들어 어째서 누가 어째서 기능을하지 못하게하는 검은 화면 응용 프로그램을 만들 수 있겠는가? – Qiulang

1

내가 애플 엔지니어에게이 질문을 제기하고 그의 대답이었다 다음

"스토리 보드의 개체 중 하나에 할당 된 사용자 지정 클래스의 초기화 함수 예는 해당 클래스의 다른 메서드가 호출되기 전에 실행됩니다 (-initWithCoder : 포함).이 메서드는 스토리 보드에서 호출됩니다 로딩) . 스토리 보드가로드되는 동안 창 개체가 만들어지고 응용 프로그램 대리인에게 할당되기 전에 실행됩니다. 이니셜 라이저 함수는 응용 프로그램 대리인에 대한 참조를 가져 와서 해당 창을 읽으려고 할 수 있습니다. "