2015-02-10 59 views
0

发送到解除分配的“__NSDictionaryI”对象(僵尸)我有使用Multipeer连接从一个iOS设备的字符串发送到另一个iOS设备的应用程序。它工作并且不起作用。一个Objective-C消息被在地址为0x1

该应用程序是相当多的看到这个链接的教程中的应用:http://www.appcoda.com/intro-multipeer-connectivity-framework-ios-programming/

有时,应用程序将发送30消息,然后崩溃,其他时候,它会崩溃在第一或第二的消息。

Xcode给我一个崩溃的EXC_BAD_ACCESS。

我用NSZombie给予一定的援助,并为我提供了下面的,但我是相当新的,无法全面了解崩溃背后的原因。

ScreenShot of 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]; 
} 

有什么建议?

+0

你在某个地方有一个指向不是的对象的指针。它毫无疑问曾经是,但随后它得到了“收集”,因为问题指针不是“强大的”(或一些类似的只是更混乱的情况)。 – 2015-02-10 13:32:28

+0

要了解发生的情况,请学习如何获取和解释“异常堆栈跟踪”。 – 2015-02-10 13:55:33

+2

您链接到的教程的FWIW非常差,您应该在别处寻找一个良好的MPC示例。如果我找到一个我会发布一个。 – ChrisH 2015-02-10 17:54:08

回答

-1

当您尝试访问任何释放对象时,通常会出现僵尸。

如果使用ARC,那么你就不需要担心太多僵尸,X代码会为你,但也有一些案件中,僵尸进来ARC项目还。我从来没有遇到过这样的问题。

如果使用非ARC项目,那么你需要手动解除分配的对象。

由于您的错误信息提示,您已使用未分配或已释放,字典的对象,您试图再次使用它。

如果你想看看那里的僵尸,然后请点击即在警报的消息后显示的箭头。你将被重定向到导致你的僵尸的线路。

请根据此更新您的代码。

希望这可以帮助你。

+0

感谢您的回复,点击下一个箭头时,显示“未知”,然后下一个箭头显示“终止”? – Manesh 2015-02-10 13:52:25

+2

如果你使用ARC,你绝对**需要**担心僵尸。 – 2015-02-10 13:54:11

+0

@HotLicks:据我一直工作到现在,僵尸从未进入我的ARC项目。我可能错了,所以你能纠正吗?谢谢... – Manthan 2015-02-11 04:03:37

相关问题