ios - RKObjectManager 的 deleteObject 带有 EXC_BAD_ACCESS

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

当尝试使用对象向服务器发送 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 是一件坏事。

此外,当您定义successfailure 的属性时,确保将它们设置为copy(而不是strong )。

关于ios - RKObjectManager 的 deleteObject 带有 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20689560/

相关文章:

iOS 多云 UIViewController 背景

iphone - 在iphone中使用json解析文本文件

iphone - 无法以编程方式更改 MFMailComposer 语言?

ios - 在大多数情况下是否需要异步核心数据?

ios - 核心数据 : Automatically Trim String Properties

ios - 如何使用 facebook sdk 在 friend 的墙上发帖?

ios - 将虚拟对象添加到项目

iphone - resignFirstResponder 并从任何地方关闭键盘?

objective-c - ios 中的简单 Accordion 菜单

iphone - 以编程方式使用 ios-core 数据创建新表