Iphone “可能的原因是什么?”;[UIWindow length]:无法识别的选择器";错误
我的iPhone应用程序是一个选项卡栏应用程序,有5个选项卡。在每个选项卡中,都有一个嵌入导航控制器的表视图。当这些表视图出现时,将从数据库加载数据 当我通过随机点击标签栏快速切换标签时,应用程序有时会崩溃。 错误是:Iphone “可能的原因是什么?”;[UIWindow length]:无法识别的选择器";错误,iphone,Iphone,我的iPhone应用程序是一个选项卡栏应用程序,有5个选项卡。在每个选项卡中,都有一个嵌入导航控制器的表视图。当这些表视图出现时,将从数据库加载数据 当我通过随机点击标签栏快速切换标签时,应用程序有时会崩溃。 错误是: +[UIWindow length]: unrecognized selector sent to class 0x3e055bd4 *** Terminating app due to uncaught exception 'NSInvalidArgumentException
+[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对解决我的问题没有帮助,但我不认为这就是问题所在。至少,我并没有明确地这样称呼,但我想我并没有这样称呼。至少,我没有明确地称之为。