2010-02-01 16 views
24

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

यदि मैं डेटाबेस को स्क्रैच से फिर से बना देता हूं, तो इंडेक्स वहां होते हैं। मैंने आईफोन और सिम्युलेटर पर SQLite ब्राउज़र के साथ जांच की। समस्या तब होती है जब पूर्व प्रारूप में कोई डेटाबेस पहले से मौजूद है।

क्या इंडेक्स मैन्युअल रूप से जोड़ने का कोई तरीका है? इसके लिए कुछ वर्ग लिखें? या क्या मैं कुछ न कुछ भूल रहा हूं? मैंने पहले से ही कुछ और महत्वपूर्ण माइग्रेशन किए हैं, कोई समस्या नहीं है। लेकिन उन लापता इंडेक्स मुझे परेशान कर रहे हैं।

मदद के लिए धन्यवाद!

+0

क्या मैं स्कॉट उत्तर को स्वीकार करने का सुझाव दे सकता हूं? यह काम करता है और यह साफ है। –

+0

निश्चित रूप से, इसके बारे में पूरी तरह से भूल गए। स्कॉट के महान जवाब के लिए धन्यवाद, विन्सेंट और थक्स! – steipete

उत्तर

50

मुझे एक ही समस्या थी।

Core Data Model Versioning and Data Migration Programming Guide के अनुसार:

वर्ज़निंग पर कोर डाटा के नजरिए कि यह केवल मॉडल की सुविधाओं में रुचि रखता है कि हठ प्रभावित करते हैं।

आप मौजूदा मॉडल में संपत्ति के लिए एक सूचकांक जोड़ने स्वचालित रूप से एक प्रवास ट्रिगर नहीं करता क्योंकि कोर डाटा अलग होने के रूप में अपने दो मॉडल स्कीमा नहीं देखता (एक सूचकांक हठ को प्रभावित नहीं करता)।

हालांकि, कोर डेटा को आपके मॉडल को आपके नए अनुक्रमित विशेषता में संस्करण हैश संशोधक जोड़कर बदला जा सकता है। इसने मेरे मौजूदा डेटाबेस को अपडेट करने के लिए हल्के माइग्रेशन को ट्रिगर किया।

+0

काम करता है, धन्यवाद, आंकड़ा करने के लिए स्पष्ट नहीं था :) –

+14

शानदार। इसे मेरे लिए हल किया। मैं पागल हो रहा था कि कोर डेटा कितना धीमा था और इंडेक्स बस मदद नहीं कर रहा था! किसी भी व्यक्ति के लिए जो उपरोक्त समाधान का अर्थ समझ में नहीं आता है ... एक नया मॉडल संस्करण बनाएं, उस विशेषता पर क्लिक करें जिसे आप इंडेक्स भी जोड़ना चाहते हैं, संपत्ति विंडो टिक इंडेक्स में, फिर "संस्करण हैश संशोधक" के लिए नीचे देखें , बस "change1" जैसी कोई स्ट्रिंग दर्ज करें। गति अंतर विशाल है –

+0

एक बार जब आप विशेषता में अनुक्रमण जोड़ते हैं और एक संस्करण हैश संशोधक में प्रवेश करते हैं, तो आप कैसे जांच सकते हैं कि मान अनुक्रमित किए जा रहे हैं? – noRema

0

आपने किस माइग्रेशन रणनीति का उपयोग किया था?

एक्सकोड में आप एक मैपिंग मॉडल उत्पन्न कर सकते हैं, और इंडेक्सिंग सहित होने वाले परिवर्तनों को देख सकते हैं।

मैं बस, मानचित्रण मॉडल जोड़ने का सुझाव सूचकांक परिवर्तन निर्दिष्ट कर रहे हैं की पुष्टि करने, और स्वत: हल्के प्रवास कार्य करें:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
    [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption,nil]; 
NSPersistentStore *migratedStore = [persistentStoreCoordinator addPersistentStoreWithType:nil configuration:nil URL:storeURL options:options error:&error]; 
migrationWasSuccessful = (migratedStore != nil); 

लगातार दुकान समन्वयक ऑटो की खोज करेंगे मानचित्रण मॉडल, और इसका इस्तेमाल प्रदर्शन करने के लिए माइग्रेशन ऐसा लगता है कि रन-टाइम अनुमानित मॉडल इकाई गुणों को अनुक्रमित करने के लिए संवेदनशील नहीं है।

+0

मैं उल्लेख करना भूल गया, उन विकल्पों को पहले से ही मेरे परीक्षणों में सक्षम कर दिया गया था। मैंने उन लोगों के बिना इसका परीक्षण नहीं किया, हालांकि ... – steipete

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