2010-11-18 11 views
5

के साथ कोर डेटा दस्तावेज़-आधारित एप्लिकेशन मेरे पास एक दस्तावेज़-आधारित कोर डेटा एप्लिकेशन है जो इस प्रकार काम करता है। मैं वस्तुओं की एक पुस्तकालय रखने के लिए एक वैश्विक निरंतर स्टोर के लिए समर्थन जोड़ना चाहता हूं।ग्लोबल पर्सिस्टेंट स्टोर

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

दस्तावेज़ तब कहते हैं, "जब आप एक समन्वयक बनाते हैं तो आप इस मॉडल का उपयोग करते हैं"। लेकिन मैं वास्तव में अपना स्वयं का निरंतर स्टोर समन्वयक नहीं बनाता क्योंकि मैं डिफ़ॉल्ट NSPersistentDocument समन्वयक का उपयोग कर रहा हूं।

कैसे सबसे अच्छा आगे बढ़ना है और किसी भी गलतफहमी को स्पष्ट करने में मदद करने पर कुछ सवाल मैं हो सकता है:

ए मैं NSPersistentDocument में NSPersistentStoreCoordinator प्राप्त करेंगे और उसके बाद की तर्ज पर यह करने के लिए एक नया लगातार दुकान जोड़ें:

NSPersistentStoreCoordinator * coordinator = [[myDocument managedObjectContext] persistentStoreCoordinator]; 
[coordinator addPersistentStoreWithType:NSXMLStoreType 
    configuration:@"LibraryConfiguration" 
    URL:url 
    options:nil 
    error:&error]; 

मैं सोच रहा हूँ कि यह एक समस्या है क्योंकि मैं के रूप में मैं डिफ़ॉल्ट NSPersistentDocument द्वारा प्रदान का उपयोग कर रहा NSPersistentDocument के लगातार दुकान समन्वयक में अन्य विन्यास परिभाषा ("DocumentConfiguration") प्रदान नहीं किया है हो सकता है। मुझे लगता है कि दस्तावेज़ को सहेजने के लिए समय आने पर शायद यह शून्य का उपयोग करेगा। और यदि हां, तो क्या यह एक समस्या होगी? यानी, समन्वयक कैसे एक सतत कॉन्फ़िगरेशन परिभाषा के साथ एक इकाई को सहेजने के लिए निरंतर स्टोर को जानेंगे यदि सभी कॉन्फ़िगरेशन सभी निरंतर स्टोर्स (इस मामले में दो) के लिए परिभाषित नहीं हैं? क्या मैं एनएसपीर्सिस्टेंट डॉक्यूमेंट के लगातार स्टोर के कॉन्फ़िगरेशन ("दस्तावेज़ कॉन्फ़िगरेशन") को सेट/सहेजने से पहले सेट करने में सक्षम हूं? NSPersistentDocument डॉक्स से:

Saving a new document adds a store of the default type with the chosen URL and invokes save: on the context. For an existing document, a save just invokes save: on the context.

बी यह मेरे अपने NSPersistentStoreCoordinator और NSManagedObjectContext उदाहरणों बनाने के लिए, परिभाषित विन्यास के साथ दो लगातार भंडार जोड़ने, और फिर NSPersistentDocument इन NSPersistentStoreCoordinator और NSManagedObjectContext उदाहरणों का उपयोग करते हैं, और बेहतर होगा पुराने लोग? यदि हां, तो मैं addPersistentStoreWithType: ... विधि के लिए NSPersistentDocument के लिए यूआरएल कैसे निर्दिष्ट करूं? ऐसा लगता है कि यह यूआरएल केवल एक बार शीर्षक रहित दस्तावेज़ सहेजा गया है। (इस पर परीक्षण करते हुए, दस्तावेज़ को पहली बार सहेजा नहीं जाता है, तब तक कोई अस्थायी लगातार स्टोर नहीं होता है (लगातार निरंतर स्टोर समन्वयक पर विधि लगातार)।

सी या यह बेहतर होगा NSPersistentDocument अकेला छोड़ दो, और अपने खुद के NSPersistentStoreCoordinator उदाहरण बनाने के लिए है कि मैं लगातार पुस्तकालय की दुकान के लिए विशेष रूप से इस्तेमाल करते हैं और कामयाब पुस्तकालय ऑब्जेक्ट मॉडल? दस्तावेज़ों का कहना है कि एनएसपीर्सिस्टेंटस्टोरकॉर्डिनेटर के कई उदाहरणों को मल्टीथ्रेड किए गए कोर डेटा अनुप्रयोगों में उपयोग किया जाना चाहिए, लेकिन मुझे बहुप्रचारित कोर डेटा समर्थन की आवश्यकता नहीं है। क्या यह एनएसपीर्सिस्टेंटस्टोर कोऑर्डिनेटर के दो उदाहरणों के लिए वांछनीय है - पुस्तकालय के लिए एक और दस्तावेज़ों के लिए एक (अंतर्ज्ञान कहता है कि यह आवश्यक नहीं है और संभवतः सही दृष्टिकोण नहीं है)?

कोई सुझाव?

उत्तर

1

जिस समाधान का मैंने उपयोग किया वह अच्छी तरह से काम करता है सी) पर आधारित है। मैं एनएसपीर्सिस्टेंट डॉक्यूमेंट और इसके लगातार स्टोर समन्वयक को अकेला छोड़ देता हूं, और इसके बजाय अपना खुद का एनएसपीर्सिस्टेंटस्टोरकॉर्डिनेटर उदाहरण बना देता हूं जिसे मैं लगातार लाइब्रेरी स्टोर (ग्लोबल स्टोर) के लिए उपयोग करता हूं।

मैं स्टोर के लिए कॉन्फ़िगरेशन को कस्टम मान पर सेट कर सकता हूं यदि मैं बाद में इस लगातार स्टोर समन्वयक से जुड़े कई स्टोर (उदाहरण के लिए, "लाइब्रेरी कॉन्फ़िगरेशन") चाहता हूं। चूंकि लाइब्रेरी स्टोर को एनएसपीर्सिस्टेंट डॉक्यूमेंट के लगातार स्टोर समन्वयक से अलग एक सतत स्टोर समन्वयक द्वारा प्रबंधित किया जाता है, इसलिए मुझे एनएसपीर्सिस्टेंट डॉक्यूमेंट के लगातार स्टोर के लिए कॉन्फ़िगरेशन निर्दिष्ट करने के बारे में चिंतित होने की आवश्यकता नहीं है।

0

आपको प्रत्येक कॉन्फ़िगरेशन के लिए एक अलग निरंतर स्टोर बनाने की आवश्यकता है। कॉन्फ़िगरेशन के लिए यही है, ताकि आप एक ही डेटा मॉडल में अलग-अलग इकाइयों को अलग-अलग लगातार फाइलों में स्टोर कर सकें।

यहां एक आम गलती यह भूल रही है कि एक सतत स्टोर समन्वयक निरंतर स्टोर्स की मनमानी संख्या हो सकती है।आपको बस इतना करना है कि ऐप्पल बॉयलरप्लेट को दो अलग-अलग स्टोर और/या स्थानों और प्रत्येक के साथ एक अलग कॉन्फ़िगरेशन नाम के साथ दो लगातार स्टोर बनाने के लिए डुप्लिकेट करें। फिर लगातार स्टोर समन्वयक दोनों को जोड़ें।

और आप कर रहे हैं। प्रत्येक कॉन्फ़िगरेशन के लिए इकाई उदाहरण सही स्टोर में जाएंगे।

+0

लेकिन NSManagedObjectContext के लिए प्रलेखन में लगातार स्टोर समन्वयक प्राप्त करने/सेट करने के तरीके हैं, एक नहीं जोड़ना। यानी, मेरी समझ से, आपके पास एक प्रबंधित ऑब्जेक्ट संदर्भ से जुड़े एक से अधिक लगातार स्टोर समन्वयक नहीं हो सकते हैं। (एक प्रबंधित ऑब्जेक्ट संदर्भ से जुड़े लगातार स्टोर समन्वयक एकाधिक निरंतर स्टोर प्रबंधित कर सकते हैं, लेकिन यह अलग है)। – Dalmazio

+0

क्षमा करें, मैं गलत लिखता हूं। आप वास्तव में 'स्टोरर्सिस्टेंटस्टोर विथ टाइप: कॉन्फ़िगरेशन: यूआरएल: विकल्प: त्रुटि:' – TechZen

+0

के साथ लगातार स्टोर समन्वयक में एकाधिक स्टोर जोड़ते हैं, ठीक है, लेकिन इस स्थिति के लिए अभी भी समस्या है (वैश्विक निरंतर स्टोर को एकीकृत करना और दस्तावेज़-आधारित की दुकान को एकीकृत करना आवेदन) को जोड़ने के लिए addPersistentStoreWithType: ... एनएस में वर्णित NSPersistentDocument के लगातार स्टोर समन्वयक पर)। – Dalmazio

संबंधित मुद्दे