2010-05-23 74 views
1

我正在編寫Coredata基於文檔的應用程序(即CoreData + NSPersistentDocument):當我創建一個新文檔時,將初始化一個新的coredata堆棧,並使用一個模型和一個託管上下文。CoreData:在保存文檔之前合併兩個上下文

用戶保存文檔之前,我需要做的是: - 創建一個新的上下文 - 在它 創造了許多新的管理對象 - 合併兩個上下文。

我問題保存:在新的上下文,但它引發異常「這NSPersistentStoreCoordinator沒有持久存儲,它不能執行保存操作。」。

我該怎麼辦? 在此操作之前是否需要保存文檔?

順便說一句,如果我保存文檔,創建一個新的環境,導入數據並保存新的背景下,最終保存文檔方面,我得到以下信息:「這個文件的文件已被其他應用程序,因爲被改變你打開或保存了它。「;有任何想法嗎?

此致敬禮!

回答

0

潛在的問題是,NSPersistentDocument做了原子保存,其中文檔NSManagedObjectConext保存到一個臨時文件,然後該文件與文檔的URL(如果存在)文件原子交換。此交換的時間不公開,使得在保存操作期間NSPersistentDocument子類幾乎不可能知道(臨時)持久存儲的URL。我相信你唯一的選擇是覆蓋-[NSPersistentDocument writeToURL:ofType:forSaveOperation:originalContentsURL:error:],這樣你就可以在創建持久存儲庫後保存新的上下文。

作爲參考,我已經在rdar:// 6510616下提交了Apple這個錯誤(請隨意複製它以投票解決)。

+0

謝謝你的回答,巴里。 我通過在文檔初始化時添加內存中的持久存儲來管理,以便不同的NSManagedObjectContext成功保存;在writeToURL:ofType:forSaveOperation:originalContentsURL:錯誤:如果它是第一次保存,我將這個存儲遷移到一個sqlite。 – unixo 2010-05-25 09:20:04

相關問題