为什么RestKit通过performBlockAndWait保存所有NSManagedObjectContexts?
问题描述:
我注意到,当保存NSManagedObjectContexts
时,RestKit将save
呼叫打包在每个NSManagedObjectContext
上,呼叫为performBlockAndWait
。为什么RestKit通过performBlockAndWait保存所有NSManagedObjectContexts?
这是我管理的家长和孩子NSManagedObjectContexts
的认识到,只有与MainQueueConcurrencyType
类型NSManagedObjectContext
应保存这种方式(这通常是PrivateQueueConcurrencyType
型这是另一个NSManagedObjectContext
孩子方面究竟是与persistentStoreCoordinator
相关)。我认为这个想法是,保存到持久存储区(即磁盘)是一个较长的操作,不会,也不应该等待。我哪里错了?
答
您对ManagedObjectContext所做的一切都必须在该上下文的调度队列中完成。确保发生的最简单方法是在由performBlock或performBlockAndWait调用的块中执行此操作。如果方法的后面有代码取决于块的结果,performBlockAndWait是要走的路。如果您必须将这些块添加到较旧的Core Data代码(如RestKit的情况下),那么将NSManagedObjectContext调用包装在performBlockAndWait中是让您的Core Data代码更安全的一种非常痛苦的方式。