异常解析 NSData 到 NSString 的副本

Exception Parsing Copy of NSData to NSString

当套接字接收到这样的数据时,我有一个回调方法...

+ (void) dataReceived:(NSData *)data {
    NSData *dataCopy = [data copy];
    NSString *msg = [[NSString alloc] initWithData:dataCopy encoding:NSUTF8StringEncoding];
NSLog(@"msg: %@", msg);
}

我可以在调试器中看到 datadataCopy 都包含正确的字符串数据。 dataCopy 没有问题,但是当调用 msg 行时,我用这个炸毁了。

2015-04-02 15:45:10.179 Sandbox[15218:539849] -[__NSCFString bytes]: unrecognized selector sent to instance 0x7f9c71447870 2015-04-02 15:45:10.184 Sandbox[15218:539849] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString bytes]: unrecognized selector sent to instance 0x7f9c71447870'

我不明白,我可以看到数据是正确的,我认为制作副本是为了防止访问被覆盖的内存。知道这里发生了什么吗?

您的 "delegate" 方法似乎是使用 NSString 而不是 NSData 调用的。在这种情况下,复制接收到的对象对您没有帮助,因为您只是将一个字符串复制到另一个字符串中。您需要深入挖掘并了解为什么 dataReceived: 没有收到预期的 NSData 对象。