在两个不同的过程中更新和删除实体
我正在研究使用coredata的ipad应用程序。它下载有关网上数据库的信息,并将它们记录在coredata中。该应用程序基于分割视图。我的问题是在后台更新数据。
以下是我的工作方式:
- 我创建了一个NSOperation,用于下载和更新数据。
- 这的NSOperation使用不同的NSManagedObjectContext比的appDelegate的背景下,这个函数返回后,即在的appDelegate:在两个不同的过程中更新和删除实体
(NSManagedObjectContext*)newContextToMainStore {
NSPersistentStoreCoordinator *coord = nil;
coord = [self persistentStoreCoordinator];
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init];
[moc setPersistentStoreCoordinator:coord];
return [moc autorelease];
}
- 我已经在的NSOperation的观察者来说,这将调用这个函数在的appDelegate当我保存的情况下,修改委托过上下文:
- (void)mergeChangesFromContextSaveNotification:(NSNotification*)notification {
[[self managedObjectContext]mergeChangesFromContextDidSaveNotification:notification];
}
但我有一个问题:当我删除RootViewController的元素,我真的不知道如何管理在后台进程中的变化,因为里面有一个循环浏览所有的enti关系:如果我删除一个实体,当后台循环处于相同的权限时,这是......非常糟糕......
我的解决方案只是在我删除一个实体时停止更新过程,然后重新启动它,只是...
但我意识到,在“主”上下文中所做的更改并不适用于我刚刚为更新创建的新上下文中。
所以我问你:为什么变化不适用于新的环境?如果这是错误的方式,你如何做到这一点?使用mergeChangesFromContext或其他东西?
非常感谢您。
对不起,我的错误:
- 首先,我的实体包含其他实体,因为关系不好,这是包含在父entitie实体未被删除。
- 第二,我在考虑调用-cancelAllOperations将会停止当前的操作,但事实并非如此,如果该过程被[self isCancelled]取消,您必须检查nsoperation。
就是这样!
如果有人从界面中删除某些东西,你不需要小心,bcs NSArrayController是线程安全的。但是如果你在同一时间进行更新和删除,你必须关心它。
您应该点击此答案旁边的复选标记,以便系统显示回答的问题。你被允许回答你自己的问题。 – TechZen 2010-08-04 13:35:33