2012-04-25 30 views
4

我正在嘗試添加新模型。新模型將有一個新實體和從當前實體到新實體的關係。我創建了新模型並將其設置爲當前模型。雖然一切正常,我可以訪問新的實體,但一些'二進制數據'條目是零。當允許選擇外部存儲時,iPhone核心數據遷移會導致二進制數據丟失

我試圖添加映射模型,然後遷移,但結果是相同的。存儲的'二進制數據'是UIImage。一些小縮略圖正在遷移。沒有全尺寸的UIImage正在遷移。

我想,也許這是自動外部存儲(由於它們的大小)的實體不會被遷移。

UPDATE

我建立一個小項目,存儲圖像的集合。我試圖創建一個新的模型,一切正常。然後我比較新項目和舊項目,唯一的區別是「允許外部存儲」。我在新項目上選擇了這個選項,創建了一個新模型,圖片丟失了。

+0

任何進展?我在這裏有同樣的問題.. – 2012-05-03 05:07:29

+0

@NicolasS我在Canis的蘋果開發者論壇上有一個回覆。他說他解決了這個問題,並且發給我他使用的代碼。問題是我看不到他發送給我的代碼將適合我的應用程序。看看下面的鏈接[鏈接](https://devforums.apple.com/message/652576#652576)。如果你知道如何使用它,請讓我知道,因爲我想在我的appp上發佈新功能,而且我完全陷入困境。 – zirinisp 2012-05-04 05:20:50

回答

12

我在想,也許外部自動存儲的實體(由於它們的大小)沒有被遷移。

這正是發生的情況。這是一個蘋果的錯誤。 Core Data將特定大小的二進制數據存儲在Documents文件夾內的外部支持文件夾中。出於某種原因,在遷移過程中,Core Data只需擦除外部存儲文件夾 - 吞噬!因此,縮略圖圖像數據遷移可以,因爲它不是外部存儲到SQLite數據庫,但較大的外部二進制文件只是被刪除。

的解決方案,我想出來的是當你的代碼初始化一個持久存儲協調爲核心的數據模型試圖自動遷移之前運行幾個檢查。檢查新模型是否與當前存儲的模型兼容。如果不是,那麼您知道Core Data即將將舊型號遷移到新版本,並且這樣做會擦除外部存儲文件夾。在此之前,只需將外部存儲文件夾移動到臨時位置即可。遷移完成後,將替換由Core Data生成的新的空白外部存儲文件夾。

我記錄的源代碼在這篇博客文章的完整的解決方案:

http://www.nickkuh.com/iphone/core-data-migration-woes-with-binary-data-and-external-storage-data-loss/2012/06/

+0

這是一項很棒的工作,您能否在答案中包含解決方案的簡短摘要(只是原理,也許是源代碼的一個鏈接),因爲這將使其成爲更好的答案。 – jrturton 2012-06-09 14:46:55

+0

完成 - 請參閱編輯。 – 2012-06-15 16:50:40

+1

有誰知道這個問題是否已在iOS 7中得到解決和解決? – SAHM 2014-03-14 14:04:33