我正在研究使用coredata的ipad应用程序。它下载有关Web上数据库的信息,并将其记录在coredata中。该应用程序基于拆分视图。我的问题是在后台更新数据。
以下是我的工作方式:
- 我创建了一个NSOperation,用于下载和更新数据
- 此NSOperation使用与appDelegate的上下文不同的NSManagedObjectContext,由此函数返回,即在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中的一个元素时,我真的不知道如何管理后台进程中的更改,因为内部有一个循环浏览所有实体:如果我删除当背景循环处于相同的权限时,一个权限,这是......非常糟糕...
我的解决方案只是在我删除一个权限时停止更新过程,然后重新启动它,只是...
但我已经意识到在“主要”上下文中所做的更改不适用于新的上下文我只是为更新而创建。
所以我问你:为什么这些变化不适用于新环境?如果这是错误的方式,你怎么做?使用mergeChangesFromContext或其他什么?
提前谢谢你。
答案 0 :(得分:0)
对不起,我的错误:
- 首先,我的实体包含其他实体,由于关系不良,父权利中包含的实体未被删除。
- 其次,我认为调用-cancelAllOperations将停止当前操作,但事实并非如此,如果使用[self isCancelled]取消进程,则必须检查nsoperation。
这就是全部!
答案 1 :(得分:-1)
如果有人会从界面删除某些东西,你不需要小心,bcs NSArrayController是线程安全的。但如果你在同一时间进行更新和删除,你必须要小心。