一个Objective-C消息被在地址为0x1
问题描述:
发送到解除分配的“__NSDictionaryI”对象(僵尸)我有使用Multipeer连接从一个iOS设备的字符串发送到另一个iOS设备的应用程序。它工作并且不起作用。一个Objective-C消息被在地址为0x1
该应用程序是相当多的看到这个链接的教程中的应用:http://www.appcoda.com/intro-multipeer-connectivity-framework-ios-programming/
有时,应用程序将发送30消息,然后崩溃,其他时候,它会崩溃在第一或第二的消息。
Xcode给我一个崩溃的EXC_BAD_ACCESS。
我用NSZombie给予一定的援助,并为我提供了下面的,但我是相当新的,无法全面了解崩溃背后的原因。
I'f崩溃是由于NSDictionary中的,在我的应用程序只有2个:
-(void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state{
NSDictionary *dict = @{@"peerID": peerID,
@"state" : [NSNumber numberWithInt:state]
};
[[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidChangeStateNotification"
object:nil
userInfo:dict];
}
-(void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID{
NSDictionary *dict = @{@"data": data,
@"peerID": peerID
};
[[NSNotificationCenter defaultCenter] postNotificationName:@"MCDidReceiveDataNotification"
object:nil
userInfo:dict];
}
有什么建议?
答
当您尝试访问任何释放对象时,通常会出现僵尸。
如果使用ARC,那么你就不需要担心太多僵尸,X代码会为你,但也有一些案件中,僵尸进来ARC项目还。我从来没有遇到过这样的问题。
如果使用非ARC项目,那么你需要手动解除分配的对象。
由于您的错误信息提示,您已使用未分配或已释放,字典的对象,您试图再次使用它。
如果你想看看那里的僵尸,然后请点击即在警报的消息后显示的箭头。你将被重定向到导致你的僵尸的线路。
请根据此更新您的代码。
希望这可以帮助你。
你在某个地方有一个指向不是的对象的指针。它毫无疑问曾经是,但随后它得到了“收集”,因为问题指针不是“强大的”(或一些类似的只是更混乱的情况)。 – 2015-02-10 13:32:28
要了解发生的情况,请学习如何获取和解释“异常堆栈跟踪”。 – 2015-02-10 13:55:33
您链接到的教程的FWIW非常差,您应该在别处寻找一个良好的MPC示例。如果我找到一个我会发布一个。 – ChrisH 2015-02-10 17:54:08