使用 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 2.0 处理 Parse.com Rest API 错误