首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AFJSONRequestOperation

使用AFJSONRequestOperation
EN

Stack Overflow用户
提问于 2012-06-14 13:32:24
回答 1查看 13.7K关注 0票数 4

我正在尝试从服务于JSON的web服务中获取一些数据。但我不知道我的代码出了什么问题。看上去很简单,但我找不到任何数据。

这是密码:

代码语言:javascript
复制
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:

代码语言:javascript
复制
{
   "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"
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-14 15:07:40

它是否成功地连接到服务器,是否正在调用成功块?

填写failure块并NSLog由failure块返回的NSError:

代码语言:javascript
复制
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                                        NSLog(@"%@", [error userInfo]);
                                                    }

我还有另外一个技巧,我建议用AFNetwork的AFHTTPClient构建AFHTTPClient,它可以帮助处理各种事情,并且通常会使事情变得更简单。您可以设置基本URL,然后给它一个附加到该基的路径。就像这样:

代码语言:javascript
复制
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:address];
[httpClient setParameterEncoding:AFJSONParameterEncoding];
NSMutableURLRequest *jsonRequest = [httpClient requestWithMethod:@"POST"
                                                            path:@"events"
                                                      parameters:dict];

另外,我建议您不要使用valueForKeyPath,只需执行objectForKey:

代码语言:javascript
复制
[JSON objectForKey:@"description"];

此外,您不应该在那里访问DumpDic:

代码语言:javascript
复制
[operation start];
AboutTXT = [DumpDic objectForKey:@"description"];

这是一个异步调用,因此一旦操作开始,DumpDic很可能会在从服务器分配数据之前被访问。因此,您正在访问一个可能还不存在的密钥。

这应该在成功或失败块中完成。一旦连接完成并准备使用这些数据,就会调用这些块。

所以它应该看起来更像这样:

代码语言:javascript
复制
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];
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11034213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档