8

我正在尝试为 ios 6 应用程序解析 JSON,但似乎无法使其正常工作。我已经搜索了大量的论坛,但还没有找到一个可行的、我理解的足以实施或适用的解决方案。

如果我错过了一个,我深表歉意。

首先,我有一个测试 WebService,据我所知,它返回有效的 JSON

http://thetrouthunter.com/SVLocationsAPI.php

其次,这是我的 Objective-C 代码:

+ (NSDictionary *)connectToService:(NSString *)query
{
    NSError *error = nil;

    query = [NSString stringWithFormat:@"%@&format=json&nojsoncallback=1", query];
    query = [query stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding];

    NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error] : nil;

    NSLog(@"locations: %@", results);

    if (error)
        NSLog(@"[%@ %@] JSON error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error.localizedDescription);

    return results;
}

+ (NSArray *)userLocation {
    NSString *request = [NSString stringWithFormat:@"http://thetrouthunter.com/SVLocationsAPI.php"];
    return [[self connectToService:request] valueForKeyPath:@"locations.location"];
}

ls NSLog 函数打印出错误:“操作无法完成。(Cocoa 错误:3840。)”

我不明白为什么会这样。我已经尝试了各种各样的事情。

4

1 回答 1

4

您正在添加%@&format=json&nojsoncallback=1到中的 URL connectToService:,并且该新 URL 会生成一个网页,而不是您期望的 JSON(即http://thetrouthunter.com/SVLocationsAPI.php&format=json&nojsoncallback=1)。

记录来自 HTTP 请求的实际结果可能很有用,这样您就可以调试它,直到获得 JSON(即在调用序列化函数之前)。

于 2013-03-20T20:47:10.930 回答