我的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
)
答案 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:
。然后问题就消失了。
感谢两位回答者,并希望这个答案能够帮助其他人。