已經有幾個類似的問題,但它與我的情況不完全相同。剛開始一個新的視圖以項目爲基礎,添加viewDidLoad
和awakeFromNib
用的NSLog語句,然後執行以下變化MainWindow.xib
:爲什麼viewDidLoad在設置UIWindow的rootViewController屬性時調用兩次?
- 刪除的應用程序委託視圖控制器連接。
- 將
UIWindow’s
rootViewController
委託給App View Controller實例。
第一次調用堆棧跟蹤:
#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()
下面是從第二個呼叫跟蹤:
#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()
這是期望的行爲或錯誤?如果我們還是用在 應用程序委託的出口連接到根視圖控制器保持清醒viewDidLoad
/viewDidUnload
比更傳統的 方式 還是應該忽略蘋果的規則,不叫超在awakeFromNib
並使用新的rootViewController
UIWindow
的財產?
不知道答案,對不起。但這正是我不使用筆尖的原因之一。 – bioffe 2011-03-29 00:50:09