我曾经在我的一个ViewControllers中有一个保留周期,但经过大量调试后,我找到了罪魁祸首并修复了它。但现在,我的应用程序崩溃,如果有问题的VC之前已经存在但是正确处理掉了,我在我的TabBarController中切换视图。
我启用了NSZombie并检查了发送导致SIGABRT的消息。
-[OrderViewController respondsToSelector:]: message sent to deallocated instance 0x151fdc00
在堆栈跟踪中,我只查找系统库调用,没有特定于应用程序。
答案 0 :(得分:1)
我找到了一种调试方法。
找到罪魁祸首
<tr ng-repeat="country in countries |filter:search ">
问题non __forwarding__
通用寄存器
(lldb) register read
ebx = 0x790257a0
edi = 0x01119988 "tabBarController: shouldSelectViewController:"
esi = 0x08a1fad1 "delegate"
ebp = 0xbfff8778
esp = 0xbfff8740
eip = 0x0099415c UIKit`-[UITabBarController _tabBarItemClicked:] + 102 10 registers were unavailable.
=发送的消息,
edi
=您发送邮件的对象,
esi
=发送邮件的原因。
这将为您提供发送nil消息的信息。
<强>解决方案强>
我之后发现了这个问题。我在eip
中取消了委托,但应该在ViewDidDisappear
中取消,因为我使用的指针在ViewWillDisappear
中不再有效。
此代码不起作用。在这种情况下,ViewDidDisappear
已经是零,所以我不能使用此引用来使委托无效。
self.tabBarController
此代码确实有效。在添加引用之前,我添加了- (void)viewDidDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.tabBarController.delegate = nil;
}
来检查引用是否有效。
NSParameterAssert
答案 1 :(得分:0)
If your view controller is a delegate for any other object, set that delegate property to nil inside the view controller's dealloc.