2011-08-02 7 views
7

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

उत्तर

4

प्राप्त करना कोई मुद्दा नहीं होना चाहिए। Fetf अनुरोध को setAffectedStores का उपयोग करके विशिष्ट स्टोरों को खोजने के लिए संशोधित किया जा सकता है: NSFetchRequest पर विधि।

जब आप कोई ऑब्जेक्ट बना रहे हों, तो आप असाइन ऑब्जेक्ट: toPersisentStore: NSManagedObjectContext पर विधि का उपयोग कर किसी विशेष स्टोर को इकाई असाइन कर सकते हैं।

अपने प्रश्न के रूप में, वहाँ वास्तव में एक डिफ़ॉल्ट तंत्र है कि मैं के बारे में पता कर रहा हूँ नहीं है, और यह हो सकता है कि आप बस अपने स्टोर के सभी प्रभावित भंडार निर्धारित करने की आवश्यकता:

[request setAffectedStores:[NSArray arrayWithObjects:firstStore,secondStore,thirdStore, nil]];

यह सुनिश्चित करने के लिए कि आप सभी सही जगहों पर देख रहे हैं।

+0

हाय, ओपी ने वर्णित एक समान स्थिति का सामना कर रहा हूं। मैं जादुई रिकार्ड का उपयोग कर रहा हूं और मेरे पास एक ऑब्जेक्ट मॉडल है, एक 'एनएसपीर्सिस्टेंटस्टोरकॉर्डिनेटर', एक 'एनएसएमएनेज ऑब्जेक्ट कॉन्टेक्स्ट' जो डिफ़ॉल्ट और 2 SQLite 'NSPersistentStore है। उनमें से एक स्थायी स्टोर के रूप में कार्य करता है और दूसरा एक अस्थायी दुकान के रूप में कार्य करता है। ऐप के भीतर मैं इस अस्थायी स्टोर को पॉप्युलेट करता हूं। लेकिन मुझे 0 परिणाम मिलते हैं। मैंने MagicalRecord के [Github] पर एक मुद्दा पोस्ट किया (https://github.com/magicalpanda/MagicalRecord/issues/976#issuecomment-77516462)। क्या आप कृपया एक नज़र डालें? – Isuru

0

मुझे लगता है कि आप वास्तव में प्रत्येक स्टोर के लिए पीएससी का उपयोग करना चाहते हैं। यह आपके द्वारा वर्णित समस्याओं को दूर करेगा और मैं वास्तव में नहीं देख सकता कि आप केवल एक पीएससी क्यों चाहते हैं।

+1

मुझे लगता है कि यह एक PSC के साथ संभव होना चाहिए। अन्यथा पीएससी में कई स्टोर जोड़ने का प्रावधान वहां नहीं हो सकता है। –

+0

मैंने सोचा कि एक PersistentStoreCoordinator का उद्देश्य कई लगातार स्टोर समन्वय करना था। जब तक उनके पास अलग-अलग प्रबंधित ऑब्जेक्ट मॉडल नहीं होते हैं। – daver

5

आप कॉन्फ़िगरेशन का उपयोग कर सकते हैं।

[PersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:nil error:] 

आप एक प्रबंधित वस्तु के संदर्भ में, एक कामयाब ऑब्जेक्ट मॉडल, एकल लगातार दुकान समन्वयक लेकिन दो लगातार भंडार, उदाहरण के लिए पहले एक SQLite दुकान और दूसरा एक एक में स्मृति की दुकान हो जाएगा होगा करना चाहते हैं।

इस सेटअप के लिए आप दो कॉन्फ़िगरेशन, SQLite स्टोर के लिए "SQLiteStore" और इन-मेमोरी स्टोर के लिए "InMemoryStore" बनाते हैं। XCode में (अपने .xcdatamodel फ़ाइल को खोलने):

.xcdatamodel file in XCode

आप अपने प्रबंधित ऑब्जेक्ट मॉडल के उपलब्ध विन्यास की सूची देखें। प्रबंधित ऑब्जेक्ट मॉडल कॉन्फ़िगरेशन मूल रूप से स्ट्रिंग नाम से जुड़े इकाई विवरणों का एक सेट है। कॉन्फ़िगरेशन उपयोग संपादक जोड़ने के लिए -> कॉन्फ़िगरेशन मुख्य मेनू आइटम जोड़ें जबकि आपके पास .xcdatamodel फ़ाइल खोली गई है, फिर एक स्ट्रिंग नाम टाइप करें जिसे आप पसंद करते हैं। उन SQL इकाइयों को खींचें जिन्हें आप पहले SQLite स्टोर में "SQLiteStore" कॉन्फ़िगरेशन और अन्य में "InMemoryStore" कॉन्फ़िगरेशन में संग्रहीत करना चाहते हैं।

ठीक है, अब यह है कि अब आपका कोड अपडेट करने का समय है। दायरे पर जाएं, जहां आप लगातार स्टोर समन्वयक बनाते हैं और इसमें लगातार स्टोर जोड़ते हैं। केवल परिवर्तन उनके लिए विन्यास को निर्दिष्ट किया जाता है:

... 
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:yourManagedObjectModel]; 
NSURL storeURL = … // your store url 
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"SQLiteStore" URL:storeURL options:nil error:&error]) 
{ 
    NSLog(@"[Core Data error] Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
}  

if (![__persistentStoreCoordinator addPersistentStoreWithType:NSInMemoryStoreType configuration:@"InMemoryStore" URL:nil options:nil error:&error]) 
{ 
    NSLog(@"[Core Data error] Unresolved error %@, %@", error, [error userInfo]); 
    abort(); 
} 
... 

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

और एक तेजी से फिर से शुरू:

  1. कामयाब ऑब्जेक्ट मॉडल संपादक में विन्यास (बनाएँ।xcdatamodel फ़ाइल);
  2. कोड में निरंतर स्टोर समन्वयक को कई निरंतर स्टोर जोड़ें, उचित कॉन्फ़िगरेशन नाम प्रदान करें।

चेक अधिक जानकारी के लिए इस लिंक: http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-SW4