RKObjectManager的deleteObject与EXC_BAD_ACCESS

时间:2013-12-19 18:57:32

标签: ios objective-c core-data restkit restkit-0.20

当尝试使用对象向服务器发送DELETE请求时,如果您填充success块,则RestKit会尝试引用解除分配的对象:

[[APIClient objectManager] deleteObject:object path:path parameters:nil 
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
  success();
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
  failure([error localizedDescription]);
}];

success()回调此刻什么也没做,因为我注意到RestKit会自动为我们删除本地Core Data对象。

如果我将success块设置为nil,那么这一切对世界都很好,但我宁愿知道它是否成功。

我猜它正在尝试在映射结果中引用已删除的对象,但我无法确定。服务器只返回一个no content标题,因此无需映射。

有什么我可能做错了导致这个吗?

1 个答案:

答案 0 :(得分:2)

为安全起见,请将代码重写为:

[[APIClient objectManager] deleteObject:object path:path parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    if (success != nil) {
        success();
    }
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    if (failure != nil) {
        failure([error localizedDescription]);
    }
}];

因为尝试执行nil块是件坏事。

此外,在为successfailure定义属性时,请务必将其设置为copy(而不是strong)。