2011-05-08 46 views
0

基於NSDocument的應用程序與「NoSuchFileError」崩潰。非常簡單 - 兩個實體,具有一對多的關係。這個應用程序與保存,加載等工作完全CoreData具有自動保存保存一日一次,然後在下面的所有使用自動保存CoreData

然後我打開自動保存這樣的:

[[NSDocumentController sharedDocumentController] setAutosavingDelay:0.1]; 

...並立即去可怕的錯誤。正確

第一個自動保存工作,100%。即它保存在用戶的私有目錄中的文件,如果你退出程序,並重新啓動時,自動保存,自動文檔重新打開。涼!

但是,只要您對數據的第二變化,你會得到一個崩潰自動保存,這一點:

error = Error Domain=NSCocoaErrorDomain Code=134030 UserInfo=0x1001a1be0 "An error occurred while saving." 
Underlying Error=(Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x10019a840 "The file doesn’t exist." 
Underlying Error=(Error Domain=NSPOSIXErrorDomain Code=2 UserInfo=0x100150d00 "The operation couldn’t be completed. No such file or directory")) 

...這是沒有意義的我。爲什麼會自動*保存*關心文件是否存在?它爲什麼會第一次工作,然後在隨後的時間失敗?

注:我查過,而蘋果attemtps使用相同的文件名第二自動保存通話 - 如果它的工作第一次,爲什麼後來失敗0.5秒???

回答

1

你爲什麼試圖自動保存每秒10次?這太經常了。實際保存文件可能需要超過十分之一秒。一個理智的價值將是10秒,這可能是更頻繁的超過實際需要。

+0

我對文檔的理解是,當它保存時,它不會再自動保存(除非在保存時修改了一些數據)。 0.1秒是爲了加快測試/調試速度,我認爲它不會影響儲蓄是否有效 - 你認爲這是什麼原因? – Adam 2011-05-09 09:51:40

0

在行之間讀取,這似乎是Apple使用NSDocument實現核心數據的已知缺陷:自動保存已損壞,並且他們不打算修復它。

從NSPersistentDocument(當你在創建項目時選擇核心數據和NSDocument所使用NSDocument的子類):

「另存爲...」並自動保存不 直接支持核心數據不能 保存到商店並保持在被管理對象 上下文中更改的狀態相同,同時將未保存的堆棧保留爲當前文檔 。

有趣宣稱「核心數據不能......」 - 當然,CD「可以」做到這一點,但我可以看到它可能是一個大量的代碼,並通過跳火圈,使其工作。聽起來更像是一個藉口,而不是解釋。