2010-06-16 16 views
7

में परिवर्तनों को सहेज नहीं रहा है, मैं अपने कोर डेटा स्टोर में एक ट्रांसफॉर्मेबल प्रॉपर्टी में NSMutableArray सहेज रहा हूं। मैं NSMutableArray में डेटा के साथ इकाई को ठीक से बना सकता हूं और फिर इसे संपत्ति से बाहर लोड कर सकता हूं, और यहां तक ​​कि परिवर्तन भी कर सकता हूं। जब मैं अपने ऐप के चारों ओर जाता हूं और इसे पुनः एक्सेस करता हूं, तो मेरे परिवर्तन सहेजे जाते हैं। हालांकि जब मैं ऐप को पुनः लोड करता हूं, तो परिवर्तन कोर डेटा स्टोर में सहेजे नहीं जाते हैं। इकाई में अन्य परिवर्तन - उदा। अपने शीर्षक को बदलना, जिसे NSString के रूप में सहेजा गया है - जब भी मैं ऐप छोड़ देता हूं और फिर से खोलता हूं तब भी सहेजा जाता है।कोर डेटा ट्रांसफॉर्मेबल प्रॉपर्टी

मैंने another StackOverflow question में पढ़ा है कि ट्रांसफॉर्म करने योग्य विशेषताओं को स्वचालित रूप से परिवर्तनों के बारे में अधिसूचित नहीं किया जाता है, और मुझे "सहेजने से पहले उचित सेटटर" कॉल करना होगा। हालांकि वास्तविक सेटटर फ़ंक्शंस का उपयोग भी - मैंने didChangeValueForKey पर कॉल करने का भी प्रयास किया है - संपत्ति ठीक से सहेजी नहीं गई है। कोई अच्छा विचार?

उत्तर

6

आप चाहिए, जैसा कि आप ध्यान दें, "फिर से सेट" एक बदला जाने संपत्ति:

id temp = [myManagedObject myTransformableAttribute]; 

//.. do something with temp 

[myManagedObject setMyTransformableAttribute:temp]; 

कोई रास्ता नहीं है कि कोर डेटा उचित रूप से एक मनमाना बदला जाने वस्तु की निगरानी कर सकता है इतना है कि यह 'सही काम कर सकता है ' खुद ब खुद।

इसके अलावा, आप निश्चित है कि आप वास्तव में आप बदला जाने वाला विशेषता को संशोधित करने के बाद प्रबंधित वस्तु संदर्भ बचाने होना चाहिए:

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

कार्यक्रम की एक एकल दौड़ के दौरान, बिना सहेजे गए परिवर्तन दिखाई देगी क्योंकि प्रबंधित वस्तु संदर्भ स्मृति में संशोधित उदाहरण रखता है। संदर्भ को सहेजने के बिना, हालांकि, उन परिवर्तनों को डिस्क पर नहीं रखा जाएगा।

+5

साथ काम कर रहा था नहीं मैं बदला जाने वाला विशेषता के रूप में NSMutableArrays के साथ इस समस्या आ रही है, और मैं उचित सेटर तरीकों ऐक्सेस कर रहे थे और संदर्भ ठीक से बचत है (अन्य विशेषताओं सबूत के रूप में सहेजा हो रहे थे)। मेरे मामले में समाधान प्रकार को एनएसएआरएआरई में बदलना था। – JoBu1324

+0

@ JoBu1324 इसके लिए धन्यवाद, मुझे हमेशा यह समझने के लिए ले गया कि सामान सही ढंग से क्यों नहीं बचा रहा था! – BluGeni

+0

@BluGeni मेरी खुशी! – JoBu1324

0

मैंने देखा है कि आपको केवल संपत्ति को फिर से सेट करने की आवश्यकता नहीं है। लेकिन आपको एक और उदाहरण की भी आवश्यकता है। यही कारण है कि यह NSMutableArray

Transformable *copy = [managedObject.transformableProperty copy]; 

// do stuff 

managedObject.transformableProperty = copy;