2012-02-24 14 views
7

को पुनरारंभ करने तक संबंधित ऑब्जेक्ट्स नहीं देखता है स्टम्पर (कम से कम मेरे लिए)।कोर डेटा प्रबंधित ऑब्जेक्ट सिम्युलेटर

मैं आईआईएम 5.0 डब्ल्यू/एआरसी, और कोर डेटा को UIManagedDocument के अंदर उपयोग कर रहा हूं।

मेरे पास इकाई (व्यक्ति) को कई रिश्ते (लोगों कहा जाता है) के साथ एक इकाई (समूह) है। जब मैं एक नया समूह जोड़ता हूं, और फिर एक नया व्यक्ति जोड़ता हूं (व्यक्ति के समूह को नए समूह में सेट करता हूं), मैं व्यक्ति इकाई पर एक अनुमान का उपयोग करके संबंधित लोगों को पुनर्प्राप्त नहीं कर सकता (जहां समूह ==% @ ", मेरा समूह)। मैंने समूह के एडपर्सन सेटर का उपयोग करने का भी प्रयास किया।

यदि मैंने एक्सकोड सिम्युलेटर को बंद कर दिया है और इसे फिर से चालू किया है, तो यह पिछले रन में बनाए गए रिश्ते को पहचानता है, मैं मौजूदा समूह ऑब्जेक्ट में नए लोगों को भी जोड़ सकता हूं। मैं सिर्फ एक नया समूह नहीं जोड़ सकता हूं और फिर रिश्ते को देखने के लिए सिम्युलेटर (या डिवाइस पर डिवाइस चला रहा हूं) को बंद किए बिना लोगों को जोड़ सकता हूं।

यदि मैं नया समूह और संबंधित व्यक्ति जोड़ने के तुरंत बाद, [समूह। लोगों की गिनती] करता हूं, तो यह मुझे सही संख्या देता है। लेकिन जब तक मैं ऐप को पुनरारंभ नहीं करता तब तक एक भविष्यवाणी के साथ एक समारोह काम नहीं करता है।

ऐसा लगता है कि UIManagedDocument का प्रबंधित ऑब्जेक्ट कॉन्टेक्स्ट संबंध नहीं देख रहा है। मैंने संदर्भ सहेजने की कोशिश की है, context.parentContext को सहेज रहा है, और दस्तावेज़ को सहेज रहा है। इनमें से कोई भी मदद नहीं की।

किसी भी विचार की सराहना की जाएगी!

+0

क्या आपने अपने मॉडल में रिवर्स रिलेशनशिप सेट किया है? – Rog

+0

हां। मेरे पास ग्रुप टू पर्सन से लोगों का नाम है। और व्यक्ति से समूह में एक उलटा एक समूह, नाम समूह। – Byron

उत्तर

10

एक UIManagedDocument सहेज लेगा, ठीक है, मूल रूप से, जब ऐसा लगता है; जब आपके पास ऐसा होता है तब आपके पास नियंत्रण नहीं होता है। हालांकि, यह निश्चित रूप से आवेदन समाप्ति पर बचाएगा, यही कारण है कि आप पुनरारंभ करते समय आवेषण देखते हैं।

नतीजतन, जबकि आपको लगता है कि आपके पास स्थायी ऑब्जेक्ट आईडी हैं, तो वे वास्तव में अस्थायी हैं, और इस प्रकार उन्हें प्राप्त नहीं किया जा सकता है। बस उन्हें एक NSLog के माध्यम से डंप करना इसे मान्य करेगा, क्योंकि अस्थायी ऑब्जेक्ट आईडी लॉग इन होने पर दिखाई देती हैं।

उन्हें स्थायी और इस प्रकार उपयोग करने के लिए मजबूर करने के लिए, अपने परिवर्धन करने के बाद निम्नलिखित का प्रयास करें। आप यह मानते हुए एक इवर के रूप में एक UIManagedDocument है

- (void)performUpdate 
{ 
    NSManagedObjectContext * context = self.managedDocument.managedObjectContext; 
    NSSet     * inserts = [context insertedObjects]; 

    if ([inserts count]) 
    { 
     NSError * error = nil; 

     if ([context obtainPermanentIDsForObjects:[inserts allObjects] 
              error:&error] == NO) 
     { 
      NSLog(@"BAM! %@", error); 
     } 
    } 

    [self.managedDocument updateChangeCount:UIDocumentChangeDone]; 
} 

जाहिर है, आप थोड़ा बेहतर कुछ यहाँ के साथ निपटने त्रुटि की जगह होगी। UIManagedDocument अब भविष्य में किसी बिंदु पर सहेज लेगा (फिर से, जब आप ऐसा करेंगे, तो आपके पास बिल्कुल नियंत्रण नहीं होगा, हम बस इसे अंतिम पंक्ति में ऐसा करने के लिए कह रहे हैं, वैसे ही एक पूर्व प्रबंधक होगा) , लेकिन नव-सम्मिलित वस्तुओं में अब उपयोग योग्य स्थायी आईडी होनी चाहिए और fetches को ठीक से काम करना चाहिए।

और हाँ, यह मेरे लिए थोड़ा अजीब लगता है, लेकिन यह खेल में UIManagedDocument के साथ चीजों को करने का सही तरीका प्रतीत होता है।

सचमुच, मुझे किसी को यह बताना अच्छा लगेगा कि मैं गलत हूं और बेहतर समाधान प्रदान करता हूं।

+0

एलन, धन्यवाद !!!इसने मुझे कई घंटे खर्च किए हैं या मेरे पहियों को कताई कर दी है। जैसा कि आपने कहा था, यह मेरे द्वारा पढ़े गए सभी ट्यूटोरियल और निर्देशों से 'आवश्यक' चरण प्रतीत नहीं होता है, लेकिन यह मेरे ऐप को ठीक से काम कर रहा है। – Byron

+0

अगर किसी के पास इसका कोई विचार है कि हम इसका उपयोग करने की आवश्यकता को कैसे रोक सकते हैं, तो मुझे यह भी सुनकर खुशी होगी। – Byron

+0

मुझे लगता है कि यह कुछ हद तक कह रहा है कि अभी तक UIManagedDocument के लिए कोई ऐप्पल-प्रदत्त नमूना कोड नहीं है। मुझे लगता है कि यह नए नेस्टेड प्रबंधित ऑब्जेक्ट संदर्भों के परिणामस्वरूप एक अनजान बग हो सकता है, और वे नमूना कोड प्रदान करने से पहले इसे ठीक करने का इंतजार कर रहे हैं। एक बेवकूफ सिद्धांत, वैसे भी। –

-1

मुझे एक समान समस्या थी, प्रदर्शन अद्यतन ने मेरी मदद नहीं की। यह किया गया:

NSArray *insertedObjs = [[self.managedObjectContext insertedObjects] allObjects]; 
if ([insertedObjs count] > 0) { 
    NSError * error; 
    [self.managedObjectContext obtainPermanentIDsForObjects:insertedObjs error:&error]; 
} 

मैं वस्तुओं को डालने के बाद और सहेजने से पहले इसे चलाने के बाद इसे चलाता हूं।

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