2012-03-19 10 views
6

के साथ माइग्रेशन समस्याएं मैंने आईओएस 5 के नए वर्ग UIManagedDocument के उपयोग के संबंध में स्टैनफोर्ड सीएस 1 9 3 पी पाठों के बाद मेरे आवेदन में कोरडाटा का उपयोग शुरू किया। दृष्टिकोण स्वयं काफी सरल है लेकिन मैं समझ नहीं पा रहा हूं कि मॉडल संशोधन के साथ कैसे निपटना है। इस तरह मैं अपने UIManagedDocument वस्तु का दृष्टांत (AppDelegate अंदर है, ताकि हर दूसरे वर्ग के लिए इसका इस्तेमाल कर सकते हैं) है:UIManagedDocument

if (!self.database) { 
    NSURL *url=[[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 
    url = [url URLByAppendingPathComponent:@"AppName"]; 

    UIManagedDocument *doc = [[UIManagedDocument alloc] initWithFileURL:url]; 
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: 
          [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, 
          [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil]; 
    doc.persistentStoreOptions = options; 
    self.database=doc; 
    [doc release]; 
} 

मुद्दा रहा है कि हर बार जब मैं अपने .xcdatamodel का एक छोटा सा बदल रहा है, मैं दस्तावेज़ में पहले संग्रहीत सभी सामग्री के साथ-साथ कोई नया उदाहरण बनाने में असमर्थ हूं।

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.' 

मैं स्थापित करने में कामयाब रहे दस्तावेज़ के "विकल्प" संपत्ति समस्या हल हो गया होता, लेकिन जाहिरा तौर पर यह पर्याप्त नहीं है सोचा: यह निम्न अपवाद उत्पन्न कर तथ्य की बात के रूप में। कोई भी मदद कर सकता है? 'उन अन्य प्रश्नों को नहीं ढूंढ सका जो वास्तव में मेरी सटीक आवश्यकताओं के अनुरूप हैं।

+0

मैंने स्टैनफोर्ड सीएस 1 9 3 पी का भी पालन किया, और मुझे एक ही त्रुटि का सामना करना पड़ रहा है। – coolcool1994

उत्तर

2

अपने कोर डेटा मॉडल को संशोधित करने से पहले, आपको "मॉडल संस्करण जोड़ें" होना चाहिए।

1. मूल मॉडल फ़ाइल का चयन करें। (उदा। YourProject.xcdatamodel)

2. "संपादक" -> "मॉडल संस्करण जोड़ें ..."। फिर एक नया मॉडल संस्करण जोड़ें (उदा। 2.0)

3. आपको एक नई मॉडल फ़ाइल मिल जाएगी। (उदा। आपका प्रोजेक्ट 2.0.xcdatamodel)। इसे संशोधित करें।

4. वर्तमान मॉडल संस्करण बदलें। शीर्ष .xcdtatmodel फ़ाइल का चयन करें -> "देखें" -> "उपयोगिताएं" -> "फ़ाइल निरीक्षक दिखाएं"। "संस्करणित कोर डेटा मॉडल" टैग ढूंढें और उस सही संस्करण का चयन करें जिसे आप संशोधित करना चाहते हैं।

यह मुझे लंबे समय तक परेशान भी करता है। उम्मीद है कि इस तरह से आप मदद कर सकते हैं ^^

+0

हाय। जवाब के लिए धन्यवाद। जाने का अच्छा तरीका लगता है। वैसे भी, आपके सुझावों का पालन करने के बाद, मुझे माइग्रेशन समस्याएं मिलती रहती हैं: *** असीमित अपवाद 'एनएसआईएनवालिडअर्ग्यूमेंट एक्सेप्शन' के कारण ऐप को समाप्त करना, कारण: 'प्रबंधित' 'नामक दो अलग-अलग इकाइयों के साथ मॉडल मर्ज नहीं कर सकता' जहां प्रबंधित चाइल्ड है मेरे मॉडल में इकाइयों में से एक। मुझे यह [प्रविष्टि] मिला है (http://stackoverflow.com/questions/3205783/core-data-error-cant-merge-models-with-two- अलग-entities-named-foo) लेकिन यह इसका उपयोग नहीं करता है मुझे आवश्यकता है के रूप में samy UIManagedDocument दृष्टिकोण ... – micamoita

+0

मुझे एक ही समस्या मिल रही है। सभी दस्तावेज कहते हैं कि "persistentStoreOptions" को जोड़ने का तरीका है। लेकिन मुझे एक ही त्रुटि संदेशों के साथ UIManagedDocument से शून्य वापसी मिलती है। स्टोर को हटाना मेरे लिए वैध विकल्प नहीं है, क्योंकि मैं एक रिलीज़ ऐप का समर्थन कर रहा हूं। –

+0

बस एक और डेटा बिंदु ...मैंने एक नमूना प्रोजेक्ट बनाया है जो यूआईएमएजेड डॉक्यूमेंट के माध्यम से कोर डेटा को उसी तरह से शुरू कर रहा है जैसा मैं अपने ऐप में कर रहा हूं, लेकिन नमूना प्रोजेक्ट ठीक से माइग्रेट करना प्रतीत होता है (यहां तक ​​कि बिना किसी लगातार स्टोर्सऑप्शन के)। –

0

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

+1

और यदि ऐप पहले से ही स्टोर में है तो क्या होगा। आप एक अलर्ट व्यू प्रदर्शित करते हैं और उपयोगकर्ताओं को अपने एप्लिकेशन को पुनर्स्थापित करने के लिए कहते हैं? – MrBr

+0

मुझे लगता है कि पीएच-के का जवाब यह है कि प्रश्नकर्ता को एक ट्यूटोरियल का पालन करने की ज़रूरत है, स्टोर में ऐप प्रकाशित करने के लिए नहीं :) – Philip007

+0

इससे मेरी मदद नहीं हुई। निरंतर स्टोर उपलब्ध नहीं है यह कहता है, लेकिन मुझे स्पष्ट रूप से यह है! – coolcool1994

0

सुनिश्चित करें कि आपने NSDocumentDirectory को NSDocumentationDirectory के रूप में गलत टाइप नहीं किया है।

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; 

NSDocumentDirectory सही है!

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