0

我有一個基於Mac文檔的應用程序,使用NSPersistentDocument作爲文檔模型。在主線程中添加的線程中的核心數據讀取數據

當創建新文檔時,應用程序增加了一些默認數據(幾個運動對象和用戶數據),以在initiWithType方法文檔。

- (id)initWithType:(NSString *)typeName error:(NSError **)outError { 
self = [super initWithType:typeName error:outError]; 

NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 

[[SportManagement sharedManager] addDefaultSports:managedObjectContext]; 
[[UserManagement sharedManager] addDefaultUser:managedObjectContext]; 

[managedObjectContext processPendingChanges]; 

return self; 

}

該應用具有輸入功能,從一些硬件,運行在一個線程,這是我的設置如下進口數據(managedObjectContext在於NSPersistentDocument的):

dispatch_async(dispatch_get_global_queue(0, 0),^{ 

    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType]; 
    [moc setPersistentStoreCoordinator:[managedObjectContext persistentStoreCoordinator]]; 

數據從硬件導入到許多NSManagedDataObject項目中。每個ManagedObject都有一個「運動」字段,該字段需要填充創建文檔時創建的其中一個運動對象。

然而,沒有在- (id)initWithType:(NSString *)typeName error:(NSError **)outError添加的運動物體在線程(MOC)的新ManagedObjectContext存在。

如果我運行應用程序,創建一個新的文件,然後讓應用程序閒置一分鐘 - 或 - 這樣,然後嘗試導入,那麼運動的物體做線程管理對象上下文中。

如何同步線程中新ManagedObjectContext從NSPersistantDocument最主要的一個?

我試過了:[managedObjectContext processPendingChanges];[managedObjectContext setStalenessInterval];,但都沒有解決這個問題。

有趣的是,這並沒有出現在Mac OS X 10.8的情況發生,只有在10.7

回答

1

設置你的「主」商務部收到NSManagedObjectContextDidSaveNotification通知,並在後臺與MOC保存-mergeChangesFromContextDidSaveNotification:合併更改。

編輯

OK,它看起來像你已經在你的MOC變化,但它只是一個便籤。在數據實際保存到持久性存儲之前,持久性存儲不知道新的數據更改。

因此,當你創建你的其他MOC,並將其連接到PSC,它不知道這些變化。

時自動保存踢,因爲「經過一段時間」它的作品你可以告訴。

我會在創建初始內容後嘗試手動保存文檔。

+0

我已經在應用程序,但這是爲了獲得線程中添加的數據回到主線程。我想要做的是獲取已經添加到主線程中的文檔ManagedObjectContext的數據,以顯示在新線程的新ManagedObjectContext中。 –

+0

然後我很困惑,因爲現在,當我一起閱讀你的問題和評論時,我甚至無法描述你描述的場景。也就是說,評論的最後一句話是什麼意思?你能詳細說明(可能還有導致問題的實際代碼)嗎? –

+0

我編輯了原文 - 希望現在有點更清楚了 - 感謝您的幫助。 –