当尝试使用对象向服务器发送 DELETE 请求时,如果您像这样填充 success
block ,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
block 设置为 nil
,那么世界上一切都很好,但我宁愿有一种方式知道它是成功的。
我猜它试图在映射结果中引用已删除的对象,但我不能确定。服务器只返回一个 no content
header ,因此没有要映射的内容。
是否是我做错了什么导致了这种情况?
最佳答案
为了安全起见,将您的代码重写为:
[[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
block 是一件坏事。
此外,当您定义success
和failure
的属性时,确保将它们设置为copy
(而不是strong
)。
关于ios - RKObjectManager 的 deleteObject 带有 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689560/