当尝试使用对象向服务器发送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
标题,因此无需映射。
有什么我可能做错了导致这个吗?
答案 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
块是件坏事。
此外,在为success
和failure
定义属性时,请务必将其设置为copy
(而不是strong
)。