2011-05-27 11 views
13

पर प्रतिबिंबित नहीं होते हैं मेरे पास एक मुख्य NSManagedObjectContext है जो इसे ऐपडिलेगेट में बनाया गया है।एक NSManagedObjectContext से सहेजे गए परिवर्तन मुख्य NSManagedObjectContext

पता है, मैं मुख्य NSManagedObjectContext को प्रभावित किए बिना नई ऑब्जेक्ट्स को संपादित/जोड़ने के लिए एक और NSManagedObjectContext का उपयोग कर रहा हूं, जब तक कि मैं उन्हें सहेज नहीं लेता।

जब मैं दूसरा NSManagedObjectContext को सहेजता हूं, तो परिवर्तन मुख्य NSManagedObjectContext में प्रतिबिंबित नहीं होते हैं, लेकिन यदि मैं सिम्युलेटर से .sqlite डेटाबेस खोलता हूं, तो परिवर्तनों को .sqlite डेटाबेस में सही ढंग से सहेजा गया है। इससे कोई फर्क नहीं पड़ता कि मैं डेटा फिर से प्राप्त करता हूं, भले ही मैं एक तीसरा एनएसएमएजेड ऑब्जेक्ट कॉन्टेक्स्ट बनाउंगा, फिर भी मैं दूसरे एनएसएमएनेज ऑब्जेक्ट कॉन्टेक्स्ट में बदलाव नहीं देख सकता, लेकिन इस बदलाव डिस्क पर इस पल पर हैं ...

अगर मैं बाहर निकलता हूं और खोलता हूं ऐप, सभी बदलाव वहां हैं।

मुख्य NSManagedObjectContext स्टोर के नए परिवर्तनों को न देखने का कारण क्या हो सकता है?

इस दृष्टिकोण से पहले, मैं एक ही एनएसएमएनेज्ड ऑब्जेक्ट कॉन्टेक्स्ट और अंडोमैनेजर का उपयोग कर रहा था, लेकिन मैं इसे दो अलग-अलग एनएसएमएनेज्ड ऑब्जेक्ट कॉन्टेक्स्ट का उपयोग करने के लिए बदलना चाहता हूं।

धन्यवाद,

मीटर।

second NSManagedObjectContext save: 
----------------------------------------- 

    NSError* error = nil; 

    if ([managedObjectContext hasChanges]) { 
     NSLog(@"This new object has changes"); 
    } 

    if (![managedObjectContext save:&error]) { 
     NSLog(@"Failed to save to data store: %@", [error localizedDescription]); 
     NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey]; 
     if(detailedErrors != nil && [detailedErrors count] > 0) { 
      for(NSError* detailedError in detailedErrors) { 
       NSLog(@" DetailedError: %@", [detailedError userInfo]); 
      } 
     } 
     else { 
      NSLog(@" %@", [error userInfo]); 
     } 
    } 

उत्तर

26

यदि आपने ऐसा नहीं किया है, तो मैं Core Data : Change Management.

पर एप्पल प्रलेखन पढ़ने आप परिवर्तन है कि दूसरे संदर्भ के माध्यम से बचा लिया गया था की पहली संदर्भ सूचित करने की आवश्यकता सुझाव देते हैं। एक संदर्भ सहेजते समय, यह NSManagedObjectContextDidSaveNotification पोस्ट करता है। उस अधिसूचना के लिए रजिस्टर करें। हैंडलर विधि में, पहले संदर्भ में विलय दूसरे संदर्भ के माध्यम से सहेजे गए परिवर्तन।

// second managed object context save 

// register for the notification 
[[NSNotificationCenter defaultCenter] 
    addObserver:self 
     selector:@selector(handleDidSaveNotification:) 
      name:NSManagedObjectContextDidSaveNotification 
     object:secondManagedObjectContext]; 

// rest of the code ommitted for clarity 
if (![secondManagedObjectContext save:&error]) { 
    // ... 
} 

// unregister from notification 
[[NSNotificationCenter defaultCenter] 
    removeObserver:self 
       name:NSManagedObjectContextDidSaveNotification 
      object:secondManagedObjectContext]; 

अधिसूचना हैंडलर: उदाहरण के लिए:

- (void)handleDidSaveNotification:(NSNotification *)note { 
    [firstManagedObjectContext mergeChangesFromContextDidSaveNotification:note]; 
} 
+0

मैंने सोचा था कि NSManagedObjectContextDidSaveNotification आवश्यक/अनिवार्य नहीं था, मैं अन्य पदों पढ़ा है और जो मेरे लिए स्पष्ट नहीं था। मैं जो सुझाव देता हूं उसका प्रयास करूंगा और यहां फिर से पोस्ट करूंगा। धन्यवाद! – mongeta

+1

धन्यवाद, पूरी तरह से काम करता है! – mongeta

+0

आपका स्वागत है! – octy

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