0

同时对 iOS 开发和 Objective-c 来说还很陌生。我有以下方法:

-(NSMutableArray *)fetchDatabaseJSON{
    NSURL *url = [NSURL URLWithString:@"http://www.ios.com/ios/responseScript.php"];
    NSError *error = nil;
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:NULL error:&error];
    //jsonArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
    //NSLog(@"Array: %@",[jsonArray objectAtIndex:0]);
    jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
    NSLog(@"Dictionary:  %@", jsonDictionary);
    return jsonArray;
}

现在 NSLog 显示:

2013-02-03 19:15:37.081 TestConnection[24510:c07] 字典:(Bannana,Apple,SomeCheese)

据我了解,字典中的任何内容都没有键值。怎么会这样?我该如何解决?我希望能够拥有简化字典操作的键。

问候,

4

1 回答 1

1

JSONObjectWithData可能会返回 NSArray 或 NSDictionary,具体取决于您提供的 JSON 数据。如果您的 JSON 字符串是一个数组,那么您将拥有一个 NSArray。如果你的 JSON 数据是一个字典,你会得到一个 NSDictionary。

将您的 JSON 数据(您的data变量)转换为字符串并使用 NSLog 打印出来。要将 NSData 转换为 NSString,请使用以下内容:

NSString *myString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];

如果您将其打印出来并看到一个 JSON 数组,那么您根本就没有字典。如果您可以更改生成 JSON 的服务器代码,则可以更改它。

我注意到的另一件事是,您假设返回的容器是可变的。如果我没记错的话,您需要使用NSJSONReadingMutableContainersJSONObjectWithData 的 options 参数中的选项来获得它。

最后一个提示,如果您想在有 NSArray(或 NSDictionary)的情况下签入代码,请使用以下内容:

if ([obj isKindOfClass:[NSArray class]]) {...}
于 2013-02-03T16:47:52.673 回答