使用 AFNetworking 无法正确处理并使用 ObjectivRecord(核心数据)创建/更新

Posted

技术标签:

【中文标题】使用 AFNetworking 无法正确处理并使用 ObjectivRecord(核心数据)创建/更新【英文标题】:Not getting it right with AFNetworking & create/update with ObjectivRecord (Core Data) 【发布时间】:2014-03-14 09:26:22 【问题描述】:

我正在使用 AFNetworking 从服务器获取 JSON 对象。然后我使用 ObjectiveRecord 创建数据对象(核心数据)。有时我会搜索和更新对象。这在模拟器上运行良好,在我的 iPhone 5 上也是如此。但是当使用 iPhone 5S 时它不起作用。我在执行insertNewObjectForEntityForName 时得到EXC_BAD_ACCESS(在ObjectiveRecord 代码中)。

阅读了很多关于核心数据和线程的文章,这让我相信我应该使用私有上下文,使用NSPrivateQueueConcurrencyType

我使用建议的方式在ObjectiveRecord中进行设置,即:

NSManagedObjectContext *newContext = [[NSManagedObjectContext alloc]   initWithConcurrencyType:NSPrivateQueueConcurrencyType];
newContext.persistentStoreCoordinator = [[CoreDataManager instance] persistentStoreCoordinator];

然后我使用createInContext: 在 AFNetworking 的完成块中创建我的对象。

我在 SO 上发现了一个类似的问题,但它没有使用 ObjectiveRecord:Get a number of resources asynchronously and "asynchronously" save them to a database. Which good pattern to use? (AFNetworking, Core Data)

但是我没有让它工作。我究竟做错了什么?还是我走错了路?

【问题讨论】:

你能不能尝试启用NSZombie,这可能会导致崩溃,当然它与AFNetworking无关,与CoreData实现有关。相同的代码在其他设备上可以正常工作吗? 要启用NSZombie,请转到MenuBar -> Product -> Scheme -> Edit Scheme,然后单击Diagnostics 选项卡。启用Enable Zombie Objects 的复选框。您将在日志中看到类似-[UITableView release]: message sent to deallocated instance 的内容,而不是抛出异常。它应该可以帮助您确定哪个对象已被释放。 这个问题只出现在 iPhone 5S 上。请参阅问题 ;-) 我会尝试使用 NSZombie 看看是否可以获得更多提示。 【参考方案1】:

我没有让这个工作。可能是因为我在 Core Data 方面的技能还不够。因此我改用MagicalRecord。比ObjectiveRecord 更容易理解如何在多线程环境中使用它。可惜没有关于如何在多线程环境中使用ObjectiveRecord 的好文章。

【讨论】:

以上是关于使用 AFNetworking 无法正确处理并使用 ObjectivRecord(核心数据)创建/更新的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 向 JSON 响应键添加引号

AFNetworking 响应格式不正确

使用 AFNetworking 上传后图像不显示在浏览器上

如何使用 AFNetworking 2.0 处理 Parse.com Rest API 错误

我的返回数据表单 AFNetworking JSON 未正确显示

AFNetworking 下载的文件丢失