web-dev-qa-db-ja.com

AFNetworking 2.0-responseObjectをNSDictionaryとして使用

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

これは、AFNetworking 2.0でGETリクエストを送信するための 推奨される方法 です。 jsonの特定のキーの値を取得したいので、responseObjectNSDictionaryとして使用します。これは私が試していたものです:

NSError *jsonError = nil;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:(NSData *)responseObject options:kNilOptions error:&jsonError];

それはうまくいきませんでした:

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary bytes]: unrecognized selector sent to instance 0xa048120'

responseObjectの特定のキーの値を取得するにはどうすればよいですか?

18
Brian

デフォルトでは、AFHTTPRequestOperationManagerresponseSerializerAFJSONResponseSerializerインスタンスに設定するため、responseObjectは既に解析済みのJSONです(あなたの場合、それはあなたの言ったとおりNSDictionaryになります)。

次に、辞書を使用するのと同じように使用します。

NSString *value = responseObject[@"someKey"];
31
Marcelo Fabri

応答オブジェクトはすでに辞書です! AFNetworkingがそれを処理しました。

5
vikingosegundo