4

JSON を提供する Web サービスからデータを取得しようとしています。しかし、コードで何が問題になったのかわかりません。とてもシンプルに見えますが、データを取得できませんでした。

これはコードです:

NSURLRequest *request = [NSURLRequest requestWithURL:URL];

AFJSONRequestOperation *operation = [AFJSONRequestOperation
   JSONRequestOperationWithRequest:request 
   success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
     DumpDic = (NSDictionary*)[JSON valueForKeyPath:@"description"] ;
   } 
   failure:nil
];

[operation start];

AboutTXT = [DumpDic objectForKey:@"description"];

JSON URLは次のとおりです。

編集

URL からの JSON:

{
   "clazz":"AboutList",
   "description":{
      "clazz":"DescriptionContent",
      "description":"ASTRO Holdings Sdn. Bhd. (AHSB) Group operates through two holding companies – ASTRO Overseas Limited (AOL) which owns the portfolio of regional investments and ASTRO Malaysia Holdings Sdn Bhd (AMH / ASTRO) for the Malaysian business, which was privatized in 2010 and is currently owned by Usaha Tegas Sdn Bhd/its affiliates, and Khazanah Nasional Berhad."
   },
   "id":{
      "inc":-1096690569,
      "machine":1178249826,
      "new":false,
      "time":1339660115000,
      "timeSecond":1339660115
   },
   "refKey":"AboutList"
}
4

1 に答える 1

13

サーバーに正常に接続されていますか、成功ブロックが呼び出されていますか?

失敗ブロックに入力し、失敗ブロックによって返された NSError を NSLog に記録します。

failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                                        NSLog(@"%@", [error userInfo]);
                                                    }

もう 1 つヒントがあります。AFNetwork の AFHTTPClient を使用して NSURLRequest を構築することをお勧めします。ベース URL を設定し、そのベースに追加するパスを指定します。このようなもの:

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:address];
[httpClient setParameterEncoding:AFJSONParameterEncoding];
NSMutableURLRequest *jsonRequest = [httpClient requestWithMethod:@"POST"
                                                            path:@"events"
                                                      parameters:dict];

また、valueForKeyPath を使用する代わりに、objectForKey を使用することをお勧めします。

[JSON objectForKey:@"description"];

さらに、そこで DumpDic にアクセスしないでください。

[operation start];
AboutTXT = [DumpDic objectForKey:@"description"];

これは非同期呼び出しであるため、操作が開始されると、DumpDic はサーバーからデータが割り当てられる前にアクセスされる可能性が高くなります。したがって、おそらくまだ存在しないキーにアクセスしています。

これは、成功ブロックまたは失敗ブロックで行う必要があります。これらのブロックは、接続が完了し、データが使用できるようになると呼び出されます。

したがって、次のようになります。

AFJSONRequestOperation *operation =
  [AFJSONRequestOperation JSONRequestOperationWithRequest:request
                                                  success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    DumpDic = [JSON objectFor:@"description"];
    AboutTXT = [DumpDic objectForKey:@"description"];
  }
  failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
    NSLog(@"%@", [error userInfo]);
  }];

[operation start];
于 2012-06-14T15:07:40.767 に答える