2015-04-02 7 views
5

चलिए यह उदाहरण लें:दायरे से मॉडल हटाएं लेकिन ऑब्जेक्ट को जीवित रखें

हम जानवरों के एक सेट के साथ काम करते हैं। आइए मान लें कि हमें डेटाबेस में बने सभी जानवरों की आवश्यकता नहीं है, और एक तर्क है जो डेटाबेस से जानवरों को जोड़ने और हटाने को नियंत्रित करता है।

उदाहरण के लिए मेरे पास "Suey" के साथ स्ट्रिंग प्रॉपर्टी name के साथ एक ऑब्जेक्ट, एक हॉर्स है, और मैं उसे addObject: के साथ रीयलम में जोड़ता हूं। तो अब हमारे पास यह ऑब्जेक्ट रीयलम में सहेजा गया है। यह ऑब्जेक्ट मान्य है, और हम horse.name कर सकते हैं, जो "सूई" लौटाएगा।

अगला क्या होता है कि मुझे डीबी से सुई को हटाने की जरूरत है। मैं deleteObject: करता हूं। लेकिन दुख की बात है, यह न केवल घोड़े के बारे में लगातार जानकारी को हटा देता है, बल्कि मेरी वस्तु को अमान्य बना देता है। सूई मूल रूप से मर चुका है, इसलिए यदि मैं उसे वापस डीबी में चाहता हूं तो मुझे जमीन से एक और घोड़ा बनाने की जरूरत है, और उसके बाद ही मैं डीबी में एक और मुकदमा कर पाऊंगा।

क्या सुई को जीवित रखने का कोई और तरीका है, इसलिए मेरे राज्य के प्रबंधन पर मुझे और अधिक लचीलापन है?

मुझे आशा है कि मैंने बिंदु स्पष्ट कर दिया है, अगर आपके कोई प्रश्न हैं तो कृपया मुझे बताएं।

अग्रिम धन्यवाद!

अद्यतन

हार्स एक-से-अनेक संबंध में लगी हुई है, तो यह जीवन काल है भी संबंधित मॉडल में प्रभाव डालता है गुण।

+0

क्या कोई भी कई संबंध हैं? क्या कोई सकारात्मकता है कि आप 'Suey' जैसे 'Duey' जैसे कई घंटे जोड़ देंगे? यदि नहीं तो ऑब्जेक्ट को हटाने के बजाय आप नाम के मान को शून्य पर सेट कर सकते हैं। और ऑब्जेक्ट होने पर जोड़ते समय आप addObject के बजाय नाम संपत्ति सेट कर सकते हैं। – Samir

+0

हां, एक से कई संबंध हैं। मैं सवाल अपडेट करूँगा, धन्यवाद। – Dumoko

उत्तर

1

वस्तुओं डेटाबेस पूर्णांक बराबर वस्तु के लिए accessors हैं। यदि किसी भी कारण से, आपको ऑब्जेक्ट वैरिएबल को ऑन-डिस्क प्रतिनिधित्व से "अलग" करने की आवश्यकता है, तो आप इसे स्मृति में कॉपी कर सकते हैं।

// Assuming `Horse` inherits from `RLMObject` and `persistedHorse` is attached to an `RLMRealm`. 
Horse *persistedHorse = ...; 
Horse *inMemoryHorseCopy = [[Horse alloc] initWithObject:persistedHorse]; 
// This will create a new `Horse` object, not tied to an RLMRealm, 
// by copying the contents of `persistedHorse`. 

आप जब भी आप एक मौजूदा RLMObject एक खड़े में या तो नकल करने की जरूरत है एक ही दृष्टिकोण का उपयोग कर सकते हैं: एक आसान तरीका है कि ऐसा करने के लिए कायम एक की सामग्री के साथ एक नया, गैर कायम वस्तु बनाने के लिए है अकेले वस्तु (ऊपर के रूप में), या किसी अन्य क्षेत्र में।

+0

मैंने देखा कि दायरे की वस्तु 'एनएससीओडीडी' प्रोटोकॉल को लागू नहीं करती है, इसलिए मूल रूप से विचार '-कोपी' विधि जैसे कुछ को कार्यान्वित करना है। ठीक है, विचार साझा करने के लिए धन्यवाद, मैं ध्यान में रखूंगा कि यह "अलग करने" का तरीका है। धन्यवाद! – Dumoko

1

documentation के अनुसार आपकी क्वेरी परिणाम ऑब्जेक्ट (आपके मामले में नाम सूई के साथ ऑब्जेक्ट हॉर्स) में प्रत्येक संशोधन सीधे डिस्क पर डेटा को संशोधित करता है क्योंकि परिणाम वास्तविक डेटा है और इसकी एक प्रति नहीं है। तो यदि आप घोड़े को हटाते हैं तो आपको एक नया बनाना होगा।

क्षेत्र में
संबंधित मुद्दे