使用 AFNetworking 2.0 进行 POST 时的 EXC_BAD_ACCESS

Posted

技术标签:

【中文标题】使用 AFNetworking 2.0 进行 POST 时的 EXC_BAD_ACCESS【英文标题】:EXC_BAD_ACCESS when doing a POST using AFNetworking 2.0 【发布时间】:2014-03-10 19:46:15 【问题描述】:

我的代码:

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 请求将几种类型的数据连同图片一起发送到服务器。我对@9​​87654324@ 请求使用了非常相似的东西,它工作正常。每当我运行此代码时,我都会在 AFNetworking 2.0. 的以下行收到 EXC_BAD_ACCESS CODE=1 错误,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 的错误块中调用它。

【问题讨论】:

self.mutableData nil?如果是这样,那么这可能是一个在AFNetworking issues page 上发布的好问题。 self.mutableData != nil 这个问题似乎是对已解除分配的错误的调用 【参考方案1】:

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

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

(上面链接的问题中概述了这两种解决方案。)

附带说明,在完成处理程序中无需分派到主队列。 AFNetworking 保证在主线程上调用完成块。

【讨论】:

谢谢!这终于让它工作了。我将更新我的完成处理程序以删除 dispatch_async。 没问题!乐于助人。

以上是关于使用 AFNetworking 2.0 进行 POST 时的 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.0 和单元测试

使用 AFNetworking 2.0 签署 API 请求

AFNetworking 2.0:isReachable 总是返回 False

AFNetworking 2.0:多部分 POST 时出现错误 503

AFNetworking 2.0 可达性警报始终显示

AFNetworking 2.0 解析的数据未显示在表格视图中