【问题标题】:How to find why NSMutableData is invalid如何找出 NSMutableData 无效的原因
【发布时间】:2010-03-14 23:08:27
【问题描述】:

我访问一个 RESTFUL 网址并返回结果。结果采用 JSON 格式。我通过以下方式将响应转换为字符串:

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

json 变量的值为 0x0。当我将鼠标悬停在它上面时,我看到了<Invalid CFStringRef>。我该如何调试它以说明它为什么无效?我在 A JSON 解析器中呈现通过浏览器返回的 JSON。这检查很好。

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

【问题讨论】:

    标签: iphone objective-c nsmutableurlrequest nsmutabledata


    【解决方案1】:

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

    然后,我会对self.receivedData 进行十六进制转储,以查看其中的实际内容。如果该数据未正确 UTF8 编码,则 initWithData:encoding: 将失败。

    (Google for NSData hex dump 以查找其他人的实用功能)

    我发现有时 Web 服务的编码很草率。所以我通常会像这样实现一个后备:

    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 服务没有正确编写或配置。

    【讨论】:

    • 谢谢。你的技术肯定会回馈一些更好的信息。
    【解决方案2】:

    使用NSLog 查看字节。

    【讨论】:

    猜你喜欢
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2014-02-12
    • 2011-02-19
    • 2012-10-19
    • 2010-11-22
    • 1970-01-01
    相关资源
    最近更新 更多