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

相關問題