如何找到NSMutableData无效的原因

时间:2010-03-14 23:08:28

标签: iphone objective-c nsmutableurlrequest nsmutabledata

我访问RESTFUL网址并获取结果。结果是JSON。我通过以下方式将响应转换为字符串:

- (void)connectionDidFinishLoading:(NSURLConnection   *)connection {
NSString *json = [[NSString alloc] initWithBytes:[self.receivedData mutableBytes] length:[self.receivedData length] encoding:NSUTF8StringEncoding];

json变量的值为0x0。当我将鼠标悬停在它上面时,我会看到<Invalid CFStringRef&gt;。我该怎么调试这个来说明它为什么无效?我在A JSON解析器中通过浏览器呈现给出的JSON。检查结果很好。

通过在URL中输入ID来返回结果。其他ID返回结果没有问题。结果集相当大。

2 个答案:

答案 0 :(得分:2)

首先,我会使用initWithData:encoding:来设置NSString。差别很小,但这种方法是有原因的。

然后,我会做一个self.receivedData的hexdump,看看那里有什么。如果该数据未正确UTF8编码,则initWithData:encoding:将失败。

(Google for NSData hex dump以查找其他人的实用程序功能来执行此操作)

我发现有时网络服务的编码很邋。所以我通常会实现这样的后备:

NSString* html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
if (html == nil) {
    html = [[NSString alloc] initWithData: data encoding: NSISOLatin1StringEncoding];
    if (html == nil) {
        html = [[NSString alloc] initWithData: data encoding: NSMacOSRomanStringEncoding];
    }
}

这是必要的,但许多Web服务没有正确编写或配置。

答案 1 :(得分:1)

使用NSLog查看字节。