0

JSON を NSDictionary に解析しようとしています。これが私が解析に使用する方法です。

+ (NSDictionary *)executeGenkFetch:(NSString *)query
{
    query = [NSString stringWithFormat:@"%@", query];
    query = [query stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     NSLog(@"[%@ %@] sent %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), query);
    NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding];
    NSError *error = nil;
    NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error] : nil;
    if (error) NSLog(@"[%@ %@] JSON error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error.localizedDescription);
     NSLog(@"[%@ %@] received %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), results);
    return results;
}

そして、これが私がこの機能を使用する方法です。

+(NSArray *)getCommentsWithParam:(NSString *)Param
{
    NSString *request = [NSString stringWithFormat:@"https://graph.facebook.com/comments/?ids=%@",Param];
    NSLog(@"request is %@",request);
    NSString *vfk = [NSString stringWithFormat:@"%@.comments.data",Param];
    return [[self executeGenkFetch:request] valueForKey:vfk];
}

問題は、getCommentsWithParam から返された NSArray をログに記録すると、常に NULL になることです。しかし、ログを見ると

 NSLog(@"[%@ %@] received %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), results);

必要な JSON を取得します。何がうまくいかないのですか?

4

1 に答える 1

5

実際のJSONデータを見ずに言うのは難しいですが、おそらく

NSString *vfk = [NSString stringWithFormat:@"%@.comments.data",Param];
return [[self executeGenkFetch:request] valueForKey:vfk];

は、いくつかの主要コンポーネント(ドットで区切られている)を持つキーパスであるためvalueForKeyPathの代わりに使用する必要があります。valueForKeyvfk

更新:もう1つの問題は、最上位のキーParamがHTTP URLであり、ドットが含まれていることです。ただし、Key-Valueコーディングでは、キーコンポーネントを区切るためにドットが使用されます。Paramしたがって、キーコンポーネントとして使用することはできません代わりobjectForKeyにトップレベルキーに

NSDictionary *results = [self executeGenkFetch:request];
return [[results objectForKey:Param] valueForKeyPath:@"comments.data"];
于 2013-02-18T10:43:02.660 に答える