2010-08-26 13 views
6

मैं अपने ऐप के लिए पसंदीदा सिस्टम लिखने की कोशिश कर रहा हूं। मैंने पहले से ही अपने मॉडल को एक प्रबंधित ऑब्जेक्ट में बदल दिया है। तो कल्पना करें कि उपयोगकर्ता को ऐसी वस्तुओं की सूची के साथ एक स्क्रीन प्रस्तुत की गई है। वे कुछ को अपने पसंदीदा में सहेजने का विकल्प चुन सकते हैं, जो उन्हें मूल डेटा में बनाए रखेगा।कोर डेटा: एकाधिक प्रबंधित ऑब्जेक्ट्स बनाएं, लेकिन केवल कुछ बचाएं?

समस्या यह है कि, जब मैं इन सभी मॉडल ऑब्जेक्ट्स बना देता हूं, तो मैं प्रबंधित ऑब्जेक्ट संदर्भ के साथ ऐसा करता हूं। यदि उपयोगकर्ता अपने पसंदीदा में एक को सहेजता है, तो यह पूरे संदर्भ को सहेजने जा रहा है, और प्रत्येक इकाई को जारी रखेगा। अतिरिक्त उनके पसंदीदा में नहीं होंगे, क्योंकि पसंदीदा में जोड़ना एक "पसंदीदा" इकाई बनाता है जो सहेजा जाता है और ऑब्जेक्ट को इंगित करता है, जो दूसरों के पास नहीं होगा। लेकिन अन्य सभी वस्तुओं को अनावश्यक रूप से बचाया जाएगा।

आईफोन पसंदीदा सिस्टम को डिजाइन करने के लिए इस मानक तरीके से मानक तरीका क्या है? क्या मुझे अपना मॉडल दो वर्गों में विभाजित करना चाहिए, जिसे मैं उपयोगकर्ता दिखाता हूं, और फिर वह जो डीबी को बचाता है? इस तरह मैं उन्हें एमओसी में डाले बिना अपने मॉडल का निर्माण कर सकता था। लेकिन यह सभी क्षेत्रों के साथ एक डुप्लिकेट क्लास होगा।

उत्तर

6

ऐसा करने का वास्तव में एक मानक तरीका नहीं है क्योंकि कोर डेटा आपको आपके द्वारा बनाई गई वस्तुओं को सहेजने की अपेक्षा करता है। हालांकि, यदि आप ऑब्जेक्ट्स बनाते हैं:

id object = [[NSManagedObject alloc] initWithEntityDescription:entity inManagedObjectContext:nil]; 

उनके पास सहेजने के लिए कोई संदर्भ नहीं होगा। तब लोगों के लिए आप को बचाने के लिए आप कर सकते हैं की जरूरत है:

[[self managedObjectContext] insertObject:object]; 

तो संदर्भ और केवल उन जो उनके संदर्भ सेट पड़ा है बचत होगी पर -save: कहते हैं।

+0

और यह सुरक्षित है? मैंने देखा कि एनएसएमओ बनाने के लिए सुविधा विधि कोड के एक बहुत बड़े हिस्से को बदल देती है। – Tesserex

+0

हां यह सुरक्षित है, क्या सुविधा विधि है? मैंने जिस विधि का वर्णन किया है वह '[NSEntityDescription insert ...]' को कॉल करने जैसा ही है। केवल अंतर यह है कि 'एनएसईएनटीटी डिस्क्रिप्शन' विधि एक ऑटोरेलेज्ड ऑब्जेक्ट देता है। –

+1

ठीक है, आप बस अपनी दूसरी चीज पिछड़ी है। सही कॉल '[[स्वयं प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट] addObject: ऑब्जेक्ट] है, ', जो आपके पास है, वहां मौजूद नहीं है। – Tesserex

0

आपके प्रबंधित ऑब्जेक्ट्स पर पसंदीदा संपत्ति होना आसान नहीं होगा। फिर अपने पसंदीदा दृश्य में आप उस पर आधारित फ़िल्टर कर सकते हैं?

+3

लेकिन यह अभी भी इस तथ्य के आसपास नहीं है कि मैं एक बहुत सारे डेटा को सहेज रहा हूं जिसकी मुझे आवश्यकता नहीं है। – Tesserex