【问题标题】:How to synchronise two NSManagedObjectContext如何同步两个 NSManagedObjectContext
【发布时间】:2010-07-11 21:46:11
【问题描述】:


我正在开发一个使用 coredata 的 ipad 应用程序。它在网络上的数据库中下载信息,并将它们记录在 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(即 UITableViewController)上的数据具有使用 appDelegate 的上下文初始化的 NSManagedObjectContext 并使用 NSFetchedResultsController 作为数据源,不要' t 自动实现信息,因为它通常必须这样做。
所以我问你:
我做错了什么?使用两个不同的上下文并同步它们是不是好方法?

【问题讨论】:

    标签: iphone multithreading core-data nsoperation


    【解决方案1】:

    您在此处的内容看起来是正确的。您确实希望确保在 rootViewController 中实现 NSFetchedResultControllerDelegate 方法,以便更改将显示在 UI 中。

    【讨论】:

    • 感谢您的回答。实现了 NSFetchedResultControllerDelegate。事实上,当我在 appDelegate 中启动它时,我的系统可以正常工作,但在稍后调用的 viewController 中却不能。我正在寻找我的错误,我认为这只是一个小错误......
    • 你好,我很困惑,我发现我的错误:我已经完成了两个 NSOperation 子类,第二个,我忘记添加观察者来进行修改两个上下文。感谢您的关注!
    猜你喜欢
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 2013-03-12
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多