gpt4 book ai didi

iphone - 为什么设置了UIWindow的rootViewController属性后viewDidLoad会被调用两次?

转载 作者:行者123 更新时间:2023-12-03 19:19:28 24 4
gpt4 key购买 nike

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

  • 删除应用程序委托(delegate)中的 View Controller 连接。
  • UIWindow rootViewController 委托(delegate)连接到 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 ()

这是期望的行为还是错误?我们是否应该仍然使用更传统的将 socket 连接到 Root View Controller 的方法应用程序委托(delegate)保持合理的 viewDidLoad/viewDidUnload 比率或者我们应该忽略 Apple 的规则,不在 awakeFromNib 中调用 super 并使用 UIWindow 的新 rootViewController 属性?

最佳答案

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

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

关于iphone - 为什么设置了UIWindow的rootViewController属性后viewDidLoad会被调用两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5462481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com