1

Facebookの公開JSONフィードをクエリしています。エラーが発生しました:

-[__ NSCFString objectForKey:]:認識されないセレクターがインスタンス0x9146b90に送信されました2012-07-11 10:32:25.536iBトップ50[1789:16a03]

オブジェクトのタグ「message」と「picture」を解析しようとしています。

"id": "108448345915250_320180984741984"

私を助けてください。

JSONの例:

{
"data": [
  {
     "id": "108448345915250_320181064741976",
     "from": {
        "name": "Amitabh Bachchan",
        "category": "Actor/director",
        "id": "108448345915250"
     },
     "story": "Amitabh Bachchan edited his Website and Location.",
     "story_tags": {
        "0": [
           {
              "id": 108448345915250,
              "name": "Amitabh Bachchan",
              "offset": 0,
              "length": 16,
              "type": "page"
           }
        ]
     },
     "type": "status",
     "created_time": "2012-07-10T05:30:10+0000",
     "updated_time": "2012-07-10T05:30:10+0000",
     "comments": {
        "count": 0
     }
  },
  {
     "id": "108448345915250_320180984741984",
     "from": {
        "name": "Amitabh Bachchan",
        "category": "Actor/director",
        "id": "108448345915250"
     },
     "message": "Singing in the praises of this new venture \u2026 metal mike and all \u2026",
     "picture": "http://photos-d.ak.fbcdn.net/hphotos-ak-snc7/293763_320180974741985_675837103_s.jpg",
     "link": "http://www.facebook.com/photo.php?fbid=320180974741985&set=a.126948684065216.26767.108448345915250&type=1&relevant_count=1",
     "icon": "http://static.ak.fbcdn.net/rsrc.php/v2/yz/r/StEh3RhPvjk.gif",
     "type": "photo",
     "object_id": "320180974741985",
     "created_time": "2012-07-10T05:29:34+0000",
     "updated_time": "2012-07-10T,
          "shares": {
        "count": 41
     },
     "likes": {
        "data": [
           {
              "name": "Amir Samy",
              "id": "100000377429168"
           },
           {
              "name": "Rashi Shrivastava",
              "id": "100001002346693"
           },
           {
              "name": "Satish Wakpaijan",
              "id": "100002129452923"
           },
           {
              "name": "Sushil Kumar",
              "id": "100002105808620"
           }
        ],
        "count": 300
     },
     "comments": {
        "count": 45
     }
  },
  ...

iOSコード:

jsonurl=[NSURL URLWithString:@"https://graph.facebook.com/TheAmitabhBachchan/posts?access_token=AcessToken"];

jsonData=[[NSString alloc]initWithContentsOfURL:jsonurl];

jsonArray = [jsonData objectFromJSONString]; 

items = [jsonArray objectForKey:@"data"];

story = [NSMutableArray array];
title = [NSMutableArray array];
picture = [NSMutableArray array];

for (NSDictionary *item in items )
{
    [story addObject:[item objectForKey:@"message"]];
   /* [title addObject:[item objectForKey:@"name"]];
    [picture addObject:[item objectForKey:@"picture"]];*/
}
4

3 に答える 3

2

行で:

jsonArray = [jsonData objectFromJSONString];

取得したJSON文字列からオブジェクトをフェッチしています。JSON文字列を正しい値に変換する必要があります。これにはSBJSONパーサーを使用します。

jsonArrayまたはアイテムがディクショナリであり、値をディクショナリに格納することではありません。次のメソッドが何を返すかについてです。

[jsonData objectFromJSONString];
[item objectForKey:@"message"];

両方(jsonArrayとitem)の辞書ですか?エラーが示すように、そのうちの1つはNSStringです。JSON値を正しく解析します。

次に、これを確認してください:

NSString *sss = @"https://graph.facebook.com/TheAmitabhBachchan/posts?access_token=393411130717153%7C1HFhZAByEHp89q6CPECJTFzuzfg";
NSURL * jsonurl=[NSURL URLWithString:[sss stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData* data = [NSData dataWithContentsOfURL: jsonurl];
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data 
                                                     options:kNilOptions 
                                                       error:nil];
NSArray *items = [json objectForKey:@"data"];
// NSDictionary *item = [items objectAtIndex:1];

NSMutableArray *story = [NSMutableArray array];

for (NSDictionary *item in items )
{

    if([item objectForKey:@"message"] || [item objectForKey:@"message"] != nil || [[item objectForKey:@"message"] length]>0){
        [story addObject:[item objectForKey:@"message"]];
    }

}             

各辞書にキー「メッセージ」が含まれているわけではありません。これは、配列の2番目の辞書にあります。

于 2012-07-11T06:15:47.603 に答える
1
NSURL * jsonurl=[NSURL URLWithString:@"https://graph.facebook.com/TheAmitabhBachchan/posts?access_token=AcessToken"];
 NSData* data = [NSData dataWithContentsOfURL: jsonUrl];
 NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data 
                                                     options:kNilOptions 
                                                       error:nil];
NSDictionary *items = [json objectForKey:@"data"];

これは機能する必要があります。itemsこれで、辞書からオブジェクトをフェッチできます。

于 2012-07-11T06:14:37.717 に答える
1

実際、これは非常に悪いフォーマットのjsonであり、私はこれを個人的にテストしました

 NSURL *jsonurl1=[NSURL URLWithString:@"https://graph.facebook.com/TheAmitabhBachchan/posts?access_token=393411130717153%7C1HFhZAByEHp89q6CPECJTFzuzfg"];

NSString *jsonData=[[NSString alloc] initWithContentsOfURL:jsonurl1];
NSDictionary *jsonArray = [jsonData objectFromJSONString]; 
NSLog(@"Js %@", [jsonArray objectForKey:@"data"]);

NSMutableArray *ar = [[NSMutableArray alloc] init];
[ar addObject:[jsonArray objectForKey:@"data"]];

NSLog(@"AAAA %@", [[[ar objectAtIndex:0] objectAtIndex:1] objectForKey:@"picture"]);

出力は

2012-07-11 13:20:41.987 InstagramDemp [4834:f803] AAAA http://photos-d.ak.fbcdn.net/hphotos-ak-snc7/293763_320180974741985_675837103_s.jpg

于 2012-07-11T07:52:19.063 に答える