【问题标题】:Why is viewDidLoad called twice when the rootViewController property of UIWindow is set?为什么设置 UIWindow 的 rootViewController 属性会调用两次 viewDidLoad?
【发布时间】:2011-07-24 15:57:41
【问题描述】:

已经有几个类似的问题,但与我的情况并不完全相同。只需启动一个基于视图的新项目,添加 viewDidLoadawakeFromNib 和 NSLog 语句,并在 MainWindow.xib 中进行以下更改:

  • 删除应用程序委托中的视图控制器连接。
  • 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 比率 还是我们应该忽略 Apple 的规则,不要在 awakeFromNib 中调用 super 并使用 UIWindow 的新 rootViewController 属性?

【问题讨论】:

  • 不知道答案,抱歉。但这正是我不使用笔尖的原因之一。

标签: iphone ipad ios4


【解决方案1】:

它看起来像一个错误,因为它只能在 Xcode 4 中重现。我将提交一个错误。

另请参阅http://shurl.at/5u(Apple 开发者论坛)

【讨论】:

  • 我刚刚在 Apple 的 Bug Reporter 中提交了一个错误,您可以在 rdar://9234809 找到该错误
  • 我的错误被归档为已知问题和 rdar://9110312 的副本
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多