2010-06-16 75 views
7

我正在將我的Core Data存儲中的Transformable屬性保存爲NSMutableArray。我可以使用NSMutableArray中的數據正確創建實體,然後將其加載出該屬性,甚至進行更改。當我繞過我的應用程序並重新訪問它時,我的更改被保存。但是,當我重新加載應用程序時,更改沒有保存在覈心數據存儲中。對實體的其他更改 - 例如即使當我退出並重新打開應用程序時,更改其標題(將其保存爲NSString)即可保存。核心數據未保存對Transformable屬性的更改

我在another StackOverflow question中讀到Transformable屬性不會自動通知變化,而且我必須在保存前調用「合適的setter」。但是,即使使用實際的setter函數 - 我也嘗試調用didChangeValueForKey - 屬性沒有正確保存。任何好主意?

回答

6

你一定要,因爲你注意到,「重新設置」可變形的特性:

id temp = [myManagedObject myTransformableAttribute]; 

//.. do something with temp 

[myManagedObject setMyTransformableAttribute:temp]; 

有沒有辦法,核心數據可以適當地監控任意變形對象,以便它可以「做正確的事'自動。

而且,你必須確定你真正節省了管理對象上下文修改變形屬性之後:

NSError *error; 
if(![[myManagedObject managedObjectContext] save:&error]) { 
    //present error 
} 

在程序的一次運行,未保存的更改會出現可見的,因爲被管理對象上下文將修改的實例保存在內存中但是,如果不保存上下文,那些更改將不會保存到磁盤。

+5

工作,我已經經歷了與NSMutableArrays作爲變形屬性這個問題上,我被訪問相應的setter方法,妥善保存上下文(其他屬性都拿到保存證據)。在我的情況下,解決方案是將類型更改爲NSArray。 – JoBu1324 2010-10-25 18:30:11

+0

@ JoBu1324謝謝你,讓我永遠明白爲什麼東西不能正確保存! – BluGeni 2013-07-22 17:59:49

+0

@BluGeni我的榮幸! – JoBu1324 2013-07-22 22:55:04

0

我注意到你不僅需要重新設置屬性。但是你還需要另一個實例。這就是爲什麼它不與NSMutableArray

Transformable *copy = [managedObject.transformableProperty copy]; 

// do stuff 

managedObject.transformableProperty = copy;