1

在我的iPhone上,我在后台线程中使用托管对象上下文(MOC)将来自服务器的消息与存储在我的数据库中的消息同步。为了防止重复,我使用谓词获取新消息的id,并检查这些消息是否已经在数据库中。导入完成后,我将后台线程上的MOC与主线程上的默认MOC合并。到现在为止还挺好。在后台线程中更新托管对象上下文

但是,如果用户创建主线程上一个新的消息消息是同步的(我已经做了背景MOC抓取到重复检查),我怎么可以更新背景MOC,以防止重复的邮件?

问候 卡斯滕

回答

0

您可以通过观察NSManagedObjectContextDidSaveNotification获得通知的在主线程中的变化:

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(updateMessages:) 
    name:NSManagedObjectContextDidSaveNotification 
    object:mainManagedObjectContext]; 

updateMessages:方法需要一个NSNotification参数:

- (void)updateMessages:(NSNotification *)notification 
{ 
    [myManagedObjectContext mergeChangesFromContextDidSaveNotification:notification]; 
} 

您可以使用[通知用户信息]获取有关更新的更详细信息。

+0

据我了解,通知发布在创建它的线程上。我的导入运行在NSOperation中。我怎么会在后台线程上调用updateMessages方法(我不知道如何获得对后台线程的引用来调用performSelector:onThread ...)? – SamVimes 2012-02-28 19:47:00

+0

您可以使用performBlock:on myManagedObjectContext让合并在其自己的队列中运行。只要确保在创建它时使用initWithConcurrencyType:NSPrivateQueueConcurrencyType。 – Yonat 2012-02-29 12:09:07

相关问题