이미 비슷한 질문이 몇 개 있었지만 제 경우와 정확히 같지 않았습니다. 다만, 새로운 뷰를 기반으로 프로젝트를 시작 NSLog 문으로 viewDidLoad
및 awakeFromNib
를 추가하고 MainWindow.xib
에 다음과 같은 변경 사항을 수행UIWindow의 rootViewController 속성을 설정하면 viewDidLoad가 두 번 호출되는 이유는 무엇입니까?
- 응용 프로그램 위임의 뷰 컨트롤러 연결을 제거합니다.
UIWindow’s
rootViewController
대리자를 App View Controller 인스턴스에 연결하십시오.
첫 번째 통화에서 스택 추적 :
#0 0x000025c0 in -[foozaViewController viewDidLoad] at /Users/rafael/Downloads/fooza/fooza/foozaViewController.m:38
#1 0x00002555 in -[foozaViewController awakeFromNib]()
#2 0x00217f26 in -[UINib instantiateWithOwner:options:]()
#3 0x00219ab7 in -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:]()
#4 0x0001f17a in -[UIApplication _loadMainNibFile]()
#5 0x0001fcf4 in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:]()
#6 0x0002a617 in -[UIApplication handleEvent:withNewEvent:]()
#7 0x00022abf in -[UIApplication sendEvent:]()
#8 0x00027f2e in _UIApplicationHandleEvent()
#9 0x01004992 in PurpleEventCallback()
#10 0x00dac944 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__()
#11 0x00d0ccf7 in __CFRunLoopDoSource1()
#12 0x00d09f83 in __CFRunLoopRun()
#13 0x00d09840 in CFRunLoopRunSpecific()
#14 0x00d09761 in CFRunLoopRunInMode()
#15 0x0001f7d2 in -[UIApplication _run]()
#16 0x0002bc93 in UIApplicationMain()
#17 0x000020d9 in main()
이 원하는 행동이나 버그가 :
#0 0x000025c0 in -[foozaViewController viewDidLoad] at /Users/rafael/Downloads/fooza/fooza/foozaViewController.m:38
#1 0x000cd089 in -[UIViewController view]()
#2 0x00040d42 in -[UIWindow addRootViewControllerViewIfPossible]()
#3 0x0079d5e5 in -[NSObject(NSKeyValueCoding) setValue:forKey:]()
#4 0x00050ff6 in -[UIView(CALayerDelegate) setValue:forKey:]()
#5 0x0021930c in -[UIRuntimeOutletConnection connect]()
#6 0x00d418cf in -[NSArray makeObjectsPerformSelector:]()
#7 0x00217d23 in -[UINib instantiateWithOwner:options:]()
#8 0x00219ab7 in -[NSBundle(UINSBundleAdditions) loadNibNamed:owner:options:]()
#9 0x0001f17a in -[UIApplication _loadMainNibFile]()
#10 0x0001fcf4 in -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:]()
#11 0x0002a617 in -[UIApplication handleEvent:withNewEvent:]()
#12 0x00022abf in -[UIApplication sendEvent:]()
#13 0x00027f2e in _UIApplicationHandleEvent()
#14 0x01004992 in PurpleEventCallback()
#15 0x00dac944 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__()
#16 0x00d0ccf7 in __CFRunLoopDoSource1()
#17 0x00d09f83 in __CFRunLoopRun()
#18 0x00d09840 in CFRunLoopRunSpecific()
#19 0x00d09761 in CFRunLoopRunInMode()
#20 0x0001f7d2 in -[UIApplication _run]()
#21 0x0002bc93 in UIApplicationMain()
#22 0x000020d9 in main()
그리고 여기에 두 번째 호출에서 추적입니까? 우리는 아직도 제정신 viewDidLoad
/viewDidUnload
비율을 유지하기 위해 응용 프로그램 위임의 루트 뷰 컨트롤러에 출구를 연결하는 전통적인 방법을 사용해야 또는 우리는 애플의 규칙을 무시하고 새로운 rootViewController
을 awakeFromNib
에서 슈퍼를 호출하고 사용하지 않는 UIWindow
의 속성?
답변을 모르겠다. 죄송합니다. 그러나 이것은 정확히 내가 펜촉을 사용하지 않는 이유 중 하나입니다. – bioffe