2015-04-02 58 views
-3

我有一個回調方法時套接字接收到這樣的數據...異常解析複製到的NSString

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

我可以在這兩個datadataCopy包含正確的字符串數據調試器看到的。 dataCopy是沒有問題,但當msg線被調用時,我爆炸瓦特/這。

2015年4月2日15:45:10.179沙盒[15218:539849] - [__ NSCFString字節]: 無法識別的選擇發送到實例0x7f9c71447870 2015年4月2日15 :45:10.184沙盒[15218: 539849 ***終止應用程序由於未捕獲的 異常「NSInvalidArgumentException」,原因是:「 - [__ NSCFString 字節]:無法識別的選擇發送到實例0x7f9c71447870」

我不明白,我可以看到數據是正確的,我認爲使副本是防止訪問被覆蓋的內存。任何想法發生了什麼?

回答

2

似乎你的「委託」方法被NSString而不是NSData調用。在這種情況下複製收到的對象不會幫助您,因爲您只是將字符串複製到另一個字符串中。您需要深入瞭解並瞭解爲什麼dataReceived:沒有收到預期的NSData對象。

+0

D'Oh。我想你是正確的。 – Ternary 2015-04-02 21:04:49