2010-04-04 21 views
0

previous question中,我正在尋找一種替代方法來修改「無日期」在我的NSManagedObject子類的date屬性中的存儲方式。以前,當用戶沒有指定日期時,我已將nil分配給該屬性。爲了解決使用NSFetchedResultsController時的排序問題,我決定在用戶​​沒有指定日期時將[NSDate distantFuture]分配給date屬性。但是,鑑於這個應用程序已經瘋狂了,我需要更新Core Data存儲,以便將任何現有的無日期值更改爲[NSDate distantFuture]。在事實後修改核心數據中的現有對象屬性

做出這個改變的最好方法是什麼?首先想到的是遍歷數組中的所有對象,並更改找到的任何nil值。這可以通過檢查指示是否執行此升級的用戶默認密鑰來限制爲一次性事件。有沒有一種方法可以用Core Data進行版本控制呢?或者另一種不涉及我寫丟棄代碼的方法?

回答

2

如果您要發佈更新,請考慮創建新模型的新版本。將date屬性設置爲required(非可選),並提供一個遙遠未來的日期作爲默認值。核心數據將在從舊的當前裝運模型到即將發佈的新模型的遷移過程中填入當前無日期的默認值。

這也避免了開發人員編寫的代碼;我很懶,所以路徑真的很吸引我。

0

我想還有其他的方法,但一個修補程序丟掉代碼和默認值的標誌可能是最有效的。您可以在日期中檢查nil以觸發代碼,但對於非trival數據卷,默認值將更快。

0

使用帶有NSPredicate的獲取請求,該請求僅與您要調整的NSDate屬性的nil值匹配。而不是執行提取,使用-[NSManagedObjectContext countForFetchRequest:error:]

這將比執行提取更快,並且如果得到非零結果,請繼續並執行提取但不提取不需要的屬性,並且不要取得關係。如果計數非常大,請設置獲取批量大小以將內存使用量的高水位標記降至最低。

相關問題