“[UIWindow length]:无法识别的选择器”错误的可能原因是什么?

时间:2010-07-08 07:15:53

标签: iphone

我的iPhone应用程序是一个标签栏应用程序,它有5个标签。在每个选项卡中,都有一个嵌入了导航控制器的表格视图。当出现这些表视图时,将从数据库加载数据。

当我通过随机点击标签栏快速切换标签时,应用程序有时会崩溃。 错误是:

+[UIWindow length]: unrecognized selector sent to class 0x3e055bd4
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIWindow length]: unrecognized selector sent to class 0x3e055bd4'
terminate called after throwing an instance of 'NSException'

有没有人有关于找出问题原因的建议或提示?

P.S。我创建了另一个类似但更简单的应用程序,不能通过这种方式崩溃。


有关调用堆栈的更多信息:

> *** Call stack at first throw:
(
 0   CoreFoundation                      0x31785fd3 __exceptionPreprocess + 114
 1   libobjc.A.dylib                     0x320118a5 objc_exception_throw + 24
 2   CoreFoundation                      0x31789af3 +[NSObject(NSObject) doesNotRecognizeSelector:] + 102
 3   CoreFoundation                      0x31788f15 ___forwarding___ + 508
 4   CoreFoundation                      0x3171b680 _CF_forwarding_prep_0 + 48
 5   UIKit                               0x3019a3ff -[UITableHeaderFooterView setText:] + 30
 6   UIKit                               0x3028239d -[UITableView(UITableViewInternal) _sectionHeaderView:withFrame:forSection:opaque:reuseViewIfPossible:] + 488
 7   UIKit                               0x30199e41 -[UITableView(UITableViewInternal) _sectionHeaderViewWithFrame:forSection:opaque:reuseViewIfPossible:] + 60
 8   UIKit                               0x3016bcb1 -[UITableView(_UITableViewPrivate) _updateVisibleHeadersAndFootersNow:] + 852
 9   UIKit                               0x3016b1a1 -[UITableView(_UITableViewPrivate) _updateVisibleCellsNow:] + 1408
 10  UIKit                               0x301693c1 -[UITableView layoutSubviews] + 140
 11  UIKit                               0x301276ab -[UIView(CALayerDelegate) _layoutSublayersOfLayer:] + 26
 12  CoreFoundation                      0x317117ff -[NSObject(NSObject) performSelector:withObject:] + 22
 13  QuartzCore                          0x321e2585 -[CALayer layoutSublayers] + 120
 14  QuartzCore                          0x321e233d CALayerLayoutIfNeeded + 184
 15  QuartzCore                          0x321e1e0f _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 210
 16  QuartzCore                          0x321e1b69 _ZN2CA11Transaction6commitEv + 192
 17  QuartzCore                          0x321e740d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 52
 18  CoreFoundation                      0x3175ba49 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 16
 19  CoreFoundation                      0x3175d475 __CFRunLoopDoObservers + 412
 20  CoreFoundation                      0x3175e77b __CFRunLoopRun + 854
 21  CoreFoundation                      0x317078eb CFRunLoopRunSpecific + 230
 22  CoreFoundation                      0x317077f3 CFRunLoopRunInMode + 58
 23  GraphicsServices                    0x33ac26ef GSEventRunModal + 114
 24  GraphicsServices                    0x33ac279b GSEventRun + 62
 25  UIKit                               0x3011e2a7 -[UIApplication _run] + 402
 26  UIKit                               0x3011ce17 UIApplicationMain + 670
 27  MyAPP                            0x00002193 main + 70
 28  MyAPP                            0x00002114 start + 52
)

3 个答案:

答案 0 :(得分:3)

很可能是指向UIWindow对象现在占用的前NSString的悬空指针。你必须找到丢失的物体,可能还需要retain

在XCode中,选择“项目”菜单下的“编辑活动可执行文件...”。选择“参数”选项卡,并将名为“NSZombieEnabled”的条目添加到“是”到“要在环境中设置的变量”部分。

NSZombieEnabled将删除的对象标记为“Zombies”,而不是回收它们的空间。启用后,只要将消息发送到Zombie对象,就会抛出异常。这应该可以帮助您缩小哪个对象没有得到正确保留。

快乐的僵尸狩猎!

答案 1 :(得分:0)

我只能猜测您尝试在代码中的某处调用+[UIWindow length]。并且Apple API中不存在方法长度

答案 2 :(得分:0)

最终,我发现了问题。

我在viewWillApear:初始化子视图并在tableView:viewForHeaderInSection:中使用它并在viewDidDisappear:中发布子视图。

我将init / release更改为viewDidLoad:viewDidUnload:。然后问题就消失了。

感谢两位回答者,并希望这个答案能够帮助其他人。