【问题标题】:How to use AFNetworking to create JSON array如何使用 AFNetworking 创建 JSON 数组
【发布时间】:2014-07-21 14:07:30
【问题描述】:

我目前正在尝试像我在这里这样创建一个 JSON 数组:

NSURL *url = [NSURL URLWithString:currentJSON];
NSData *jsonData = [NSData dataWithContentsOfURL:url];
NSError *error = nil;
if (jsonData) {

    result = [NSJSONSerialization JSONObjectWithData:jsonData
                                             options:NSJSONReadingMutableContainers
                                               error:&error];
}

效果很好。除此之外,如果互联网连接不好,我希望它超时。

然后我去了 AFNetworking,在那里我编写了这样的代码:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:currentJSON parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) 
{
    NSError *error = nil;
    result = [NSJSONSerialization JSONObjectWithData:responseObject
                                             options:NSJSONReadingMutableContainers 
                                               error:&error];
    [[NSUserDefaults standardUserDefaults] setObject:result forKey:@"All"];
    [[NSUserDefaults standardUserDefaults] synchronize];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) 
{
    result = [[NSUserDefaults standardUserDefaults] mutableArrayValueForKey:@"All"];
}

但是这个方法总是跑到failure 怎么办?我做错了什么?

【问题讨论】:

  • 您能否打印“错误”描述以查看导致错误的原因?

标签: ios objective-c json afnetworking afnetworking-2


【解决方案1】:

检查服务器是否使用正确的内容类型“application/json”发送 JSON。 AFNetowrking 开箱即用地检查此内容,如果收到其他内容(例如 'text/html'),则会调用失败块。

AFNetworking 还对 JSON 进行开箱即用的对象解析。 “id responseObject”已经是“[NSJSONSerialization JSONObjectWithData]”的结果。

如果您无法更改服务器发送的内容类型,您可以使用以下 sn-p 将该内容类型添加到接受的类型中

NSMutableSet *accepted = [NSMutableSet set];
[accepted addObject:@"text/html"];
[accepted addObject:@"application/json"];
manager.responseSerializer.acceptableContentTypes = accepted;

【讨论】:

    【解决方案2】:

    试试这个:

      NSURL *url = [NSURL URLWithString:string];
      NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    
        AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
        operation.responseSerializer = [AFJSONResponseSerializer serializer];
    
        [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    
    
            result = (NSDictionary *)responseObject;
    
    
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    
    
        }];
    
    
        [operation start];
    

    【讨论】:

    • 我收到错误Incompatible pointer types assigning to 'NSArray *' from 'NSDictionary *'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 2018-11-15
    • 2011-02-02
    • 1970-01-01
    • 2016-03-29
    • 2015-06-07
    • 1970-01-01
    相关资源
    最近更新 更多