1

次の例では、Flickr JSON から ID 値にアクセスします (以下を参照)。

{
page = 1;
pages = 336567;
perpage = 20;
photo =     (
            {
        farm = 6;
        id = 10573655046;
        isfamily = 0;
        isfriend = 0;
        ispublic = 1;
        owner = "32491986@N08";
        secret = 91349d9115;
        server = 5533;
        title = DSC09356;
    },
            {
        farm = 8;
        id = 10573936633;
        isfamily = 0;
        isfriend = 0;
        ispublic = 1;
        owner = "32491986@N08";
        secret = 6abdcaa69e;
        server = 7295;
        title = DSC09118;
    }

);

だから私は次のパターンを使用しようとしました

 NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

if(json == nil){
    NSLog(@"NULL");
}else 
    NSLog(@" WORKED");

 NSArray* flickrPics = [json objectForKey:@"photos"];
 NSLog(@"Details: %@", flickrPics); //works
 NSDictionary* lastUpload = [flickrPics objectAtIndex:0];
 //fails on that line but the idea would have been to then
  NSNumber* id = lastUpload[@"photo"][@"id"];

これがエラーです

2013-10-30 13:43:50.534 JSON1[1508:1303] -[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance 0x8ab3820

では、なぜこのエラーが発生するのでしょうか (別の JSON オブジェクトでこのパターンを使用しました)。

4

2 に答える 2

0

これは、次の行が原因です。

 NSArray* flickrPics = [json objectForKey:@"photos"];

配列ではなく NSDictionary を返しています

于 2013-10-30T14:01:51.787 に答える
0

だから私は問題を解決しました。認識する必要がある問題は、JSON では写真が辞書の配列を保持するキーであることです。では、その配列内の特定の項目にアクセスする方法は?

//In this case valueForKey @"photo" will return as an array
NSArray *results = [flickr valueForKey:@"photo"];
//next we can iterate through the array. Each element of the Array is a dictionary
  for(NSDictionary *UserPhotoData in results){
//now we can retrieve the ID (or whatever piece of data you require 
    NSNumber *getId = [UserPhotoData valueForKey:@"id"];
    NSLog(@" id %@", getId);
}

それはうまくいきます。

しかし、よくわかりません

1) valueForKey によって何が返されるかを開発者が知る方法。NSArray の場合もあれば、文字列または数値の場合もあります。

于 2013-10-30T17:59:43.293 に答える