我的代码:
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
非常相似的东西请求,它工作正常。每当我运行此代码时,我都会在 AFNetworking 2.0 的以下行中收到
responseObject 是 EXC_BAD_ACCESS CODE=1
错误。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
更新
我在代码上运行了 instruments,发现有一个僵尸存在。 AFNetworking
正在尝试调用 NSError
,但它已被释放。我相信这是因为 POST
调用最初成功,但仍然标记了一个错误。所以它最初认为没有错误并将其设置为 nil
,但随后尝试在 POST
的错误 block 中调用它。
最佳答案
如果您使用的是最新版本,您可能会遇到 this known issue当 JSON 序列化程序返回错误时。在以下人员发布新版本之前,您可以解决此问题:
- 删除序列化器中的
@autoreleasepool
,或者 - 将错误范围更改为自动释放池之外
(以上链接的问题中概述了两种解决方案。)
附带说明一下,无需在完成处理程序中分派(dispatch)到主队列。 AFNetworking 保证在主线程上调用完成 block 。
关于objective-c - 使用 AFNetworking 2.0 执行 POST 时的 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22309827/