使用AFNetworking 2.0进行POST时的EXC_BAD_ACCESS

时间:2014-03-10 19:46:15

标签: objective-c http post afnetworking-2

我的代码:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager] ;
manager.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONReadingAllowFragments];
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
[manager POST:[_urlBase stringByAppendingPathComponent:_urlRequest]
         parameters:paramDictionary
         success:^(NSURLSessionDataTask *task, id responseObject){
             dispatch_async(dispatch_get_main_queue(),^{
                 [self AFRequestFinished:responseObject];
             });
         }
         failure:^(NSURLSessionDataTask *task, NSError *error){
             NSLog(@"JSON ERROR PARAMETERS: %@", error);
         }
];

我正在使用此POST请求将多种类型的数据连同图片一起发送到服务器。
我正在使用与GET请求非常相似的内容,它运行正常。每当我运行此代码时,EXC_BAD_ACCESS CODE=1的以下行都会出现AFNetworking 2.0.错误:responseObject为0x0

responseObject = [self.responseSerializer responseObjectForResponse:task.response data:[NSData dataWithData:self.mutableData] error:&serializationError];

上面的代码行在以下的if / else方法中:

- (void)URLSession:(__unused NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error

更新

我在代码上运行了乐器,并且有一个僵尸存在。 AFNetworking正在尝试拨打NSError,但已取消分配。我相信这已经出现,因为POST调用最初成功,但仍然存在标记的错误。所以它最初认为没有错误并将其设置为nil,但随后尝试在POST的错误块中调用它。

1 个答案:

答案 0 :(得分:1)

如果您使用的是最新版本,则当JSON序列化程序返回错误时,您可能会遇到this known issue。您可以解决此问题,直到通过以下方式发布新版本:

  • 删除序列化程序中的@autoreleasepool
  • 将错误范围更改为自动释放池之外

(两个解决方案都在上面链接的问题中列出。)

另外,没有必要在完成处理程序中调度到主队列。 AFNetworking保证在主线程上调用完成块。