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

Iphone “可能的原因是什么?”;[UIWindow length]:无法识别的选择器";错误,iphone,Iphone,我的iPhone应用程序是一个选项卡栏应用程序,有5个选项卡。在每个选项卡中,都有一个嵌入导航控制器的表视图。当这些表视图出现时,将从数据库加载数据 当我通过随机点击标签栏快速切换标签时,应用程序有时会崩溃。 错误是: +[UIWindow length]: unrecognized selector sent to class 0x3e055bd4 *** Terminating app due to uncaught exception 'NSInvalidArgumentException

我的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'
有人对找出问题的原因有什么建议或提示吗

顺便说一下,我创建了另一个类似但更简单的应用程序,它不能以这种方式崩溃


有关调用堆栈的详细信息:

> *** 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
)

我只能猜测您试图在代码中的某个地方调用
+[ui窗口长度]
。苹果API中不存在方法长度

我只能猜测您试图在代码中的某个地方调用
+[UIWindow length]
。而且方法长度在Apple API中不存在,很可能是指向UIWindow对象占用的前NSString的悬空指针。您必须找到丢失的物品,并可能保留它

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

NSZombieEnabled将删除的对象标记为“僵尸”,而不是回收其空间。启用时,每当消息发送到僵尸对象时都会引发异常。这将帮助您缩小未正确保留的对象的范围


僵尸狩猎快乐

最有可能是指向以前的NSString的悬空指针,该NSString现在被UIWindow对象占用。您必须找到丢失的物品,并可能保留它

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

NSZombieEnabled将删除的对象标记为“僵尸”,而不是回收其空间。启用时,每当消息发送到僵尸对象时都会引发异常。这将帮助您缩小未正确保留的对象的范围


僵尸狩猎快乐

最终,我发现了问题所在

我在
viewWillApear:
中初始化一个子视图,并在
tableView:viewForHeaderInSection:
中使用它,然后在
viewdidemouse:
中释放子视图

我将init/release更改为
viewDidLoad:
viewDidUnload:
。那么问题就不存在了


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

最终,我发现了问题所在

我在
viewWillApear:
中初始化一个子视图,并在
tableView:viewForHeaderInSection:
中使用它,然后在
viewdidemouse:
中释放子视图

我将init/release更改为
viewDidLoad:
viewDidUnload:
。那么问题就不存在了


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

谢谢你,约翰。我会设法找到丢失的东西。我喜欢你的“快乐猎僵尸”。但我提供的信息来自于打开NSZombieEnabled。如果我没有启用它,我就无法获得任何错误信息。我认为如果你不启用它,就不会有僵尸对象,也就不会有错误和崩溃。您是否尝试过进行简单的快速构建和分析?打开NSZombieEnabled时,“无法识别的选择器”异常通常会转换为“发送到解除分配对象的消息”异常。这就是我为什么建议的原因。顺便说一句,我将+1沃德康的建议:构建和分析通常是好的。是的,我尝试使用构建和分析。实际上,我将其设置为静态分析,这使得Xcode对每个建筑进行分析。另外,关闭NSZombieEnable对解决我的问题没有帮助。谢谢你,John。我会设法找到丢失的东西。我喜欢你的“快乐猎僵尸”。但我提供的信息来自于打开NSZombieEnabled。如果我没有启用它,我就无法获得任何错误信息。我认为如果你不启用它,就不会有僵尸对象,也就不会有错误和崩溃。您是否尝试过进行简单的快速构建和分析?打开NSZombieEnabled时,“无法识别的选择器”异常通常会转换为“发送到解除分配对象的消息”异常。这就是我为什么建议的原因。顺便说一句,我将+1沃德康的建议:构建和分析通常是好的。是的,我尝试使用构建和分析。实际上,我将其设置为静态分析,这使得Xcode对每个建筑进行分析。另外,关闭NSZombieEnable对解决我的问题没有帮助,但我不认为这就是问题所在。至少,我并没有明确地这样称呼,但我想我并没有这样称呼。至少,我没有明确地称之为。