Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 启用僵尸对象不足以帮助调试我的问题-我还能做什么?_Iphone_Objective C_Pushviewcontroller_Presentmodalviewcontroller_Memory Management - Fatal编程技术网

Iphone 启用僵尸对象不足以帮助调试我的问题-我还能做什么?

Iphone 启用僵尸对象不足以帮助调试我的问题-我还能做什么?,iphone,objective-c,pushviewcontroller,presentmodalviewcontroller,memory-management,Iphone,Objective C,Pushviewcontroller,Presentmodalviewcontroller,Memory Management,我得到以下运行时错误,我无法确定我的生命是什么。错误是线程1:EXC_断点(code=EXC_1386_BPT,subcode=0x0),每当我从任何VC执行dismissModalViewController:animated或pushViewController:animated方法时,都会发生此错误 我已启用僵尸对象,并在调试器中显示以下消息,2012-06-14 16:34:58.769 MyApp[5952:17903]***-[MyDetailsVC respondsToSelect

我得到以下运行时错误,我无法确定我的生命是什么。错误是
线程1:EXC_断点(code=EXC_1386_BPT,subcode=0x0)
,每当我从任何VC执行
dismissModalViewController:animated
pushViewController:animated
方法时,都会发生此错误

我已启用僵尸对象,并在调试器中显示以下消息,
2012-06-14 16:34:58.769 MyApp[5952:17903]***-[MyDetailsVC respondsToSelector:]:发送到解除分配实例0x8c3d400的消息

仅在访问MyDetailsVC ViewController后发生。情况如下

  • 启动应用程序,一切都很好,我可以推到和弹出的视图控制器,目前和解散模态VC的没有任何问题
  • 我按下MyDetailsVC,不做任何操作,然后点击后退按钮
  • 现在我又回到了推MyDetailsVC之前的状态,该应用程序继续完美工作,直到我必须推送到VC或呈现模式VC为止。然后我得到运行时错误
当我遇到错误时,MyDetailsVC甚至不在图片中,也与其他VC无关

如何使用调试器更精确地确定此问题是什么

另外,错误消息上写着“message sent”,所以我几乎已经在我的VC中评论了我所有的NSNotification,以排除我的一个VC试图向不再存在的VC发送消息的可能性。。。不走运


PS-我使用的是Xcode 4.3.1,5.1 w/ARC

问题不在于通知。objective-c中的消息只是函数/方法调用。它看起来像是respondsToSelector:导致了问题


检查MyDetailsVC是否具有[self respondsToSelector:@“此处的某些方法”]。也可能是另一个对象在MyDetailsVC被解除和释放后调用MyDetailsVC上的respondsToSelector。确保在ViewDiUnload下的MyDetailsVC中将@synthesized properties设置为nil,并停止所有挂起的PerformSelect调用。

调试器中的回调堆栈中没有任何内容显示正在发生的代码行

respondsToSelector在委托上被多次调用(以查看是否实现了协议中的可选方法)。您的MyDetailsVC是否将自己指定为任何对象的委托?如果是,请确保在dealloc例程中指定xyz.delegate=nil


所以您可能有“self.navigationController.delegate=self”。因此,您需要在dealloc例程中匹配“self.navigationController.delegate=nil”。

不,我没有为它分配任何委托,但我在其中使用了以下协议。(
)。在调试器的回调堆栈中,它始终指向读取
[self dismissModalViewControllerAnimated:YES]的代码行
在任何使用该方法的VC中,它对
[self.navigationController-pushview-controller:someOtherVC-animated:YES]执行相同的操作那么,你被指派为所有这些事情的代理人,不是吗?(例如self.tableview.delegate=self)在您的dealloc过程中,所有这些都需要被置零(尽管您的tableview本身当时应该被解除锁定)。就个人而言,我会查看UINavController委托,因为您的myDetailsVC将通过您的模式/推送调用得到通知。Holy$$$that fregging
[self.navigationController setDelegate:self];
是问题所在!我从标题中删除了协议,并注释掉了setDelegate:self行和viola行。非常感谢您的帮助!!请将您的注释作为答案提交,我会将其标记为已接受。那么我应该将
setDelegate:nil
调用放在哪里?我的viewDidUnload只有在应用程序收到me时才会被调用mory警告,VC不在视图中。我是否将其放入
-(void)dealloc{[self.navigationController setDelegate:nil];}
?我尝试过,但它没有解决问题。这就是它应该去的地方(尽管我viewDidUnload也应该工作;非常确定这是在VC的dealoc之前调用的).我不知道你为什么需要回调,但如果只有当你在屏幕上时才需要回调,那么你可以在ViewDidEnglish中将其设置为nil。我在MyDetailsVC中搜索了使用
@selector
,我找到的所有内容(6)方法总共都是只在MyDetailsV中使用的简单方法。例如,按钮上的选择器执行小任务,显示操作表等。此外,在我的ViewDidLoad方法中,我在第一行有一条NSLog消息,以查看ViewDidLoad是否被调用过,它从未被调用过,因此我甚至不知道MyDetailsV是如何调用的C甚至可能被释放…这可能是来自调试器的虚假消息吗?