2010-06-05 7 views
5

मैंने डेटा को सहेजने और आईफोन ऐप के लिए कोरडाटा और मल्टी-थ्रेड के साथ विलय करने का प्रयास किया। लेकिन विलय के बाद मुख्य धागे में प्रबंधित वस्तुओं को प्राप्त नहीं किया जा सकता है।CoreData संदर्भ के बाद ऑब्जेक्ट्स कैसे प्राप्त करें

मैं कोड लिखा था सिर्फ इस तरह:

[managedObjectContext performSelectorOnMainThread:@selector(mergeChangesFromContextDidSaveNotification:) 
             withObject:notification 
            waitUntilDone:YES]; 

[self performSelectorOnMainThread:@selector(didMerged:) withObject:objectIds waitUntilDone:YES]; 

तो मैं मुख्य थ्रेड जो एक और धागा में उत्पन्न किया गया में NSManagedObject उदाहरणों पाने के लिए objectIds पारित करने के लिए कोशिश की। पहले मैंने "objectWithId" विधि को आजमाया लेकिन यह गलती ऑब्जेक्ट उत्पन्न करता था। तब मैं करने की कोशिश की "existingObjectWithID" विधि, लेकिन यह आंशिक रूप से वस्तुओं उत्पन्न और दूसरों निम्नलिखित त्रुटि के साथ नहीं के बराबर थे:

[Error] Error Domain=NSCocoaErrorDomain Code=133000 "Operation could not be completed. (Cocoa error 133000.)" 

क्या गलत है? क्या किसी अन्य धागे में विलय करने के बाद ऑब्जेक्ट्स द्वारा ऑब्जेक्ट्स द्वारा सभी ऑब्जेक्ट्स को पुनर्प्राप्त करने का कोई तरीका है?

धन्यवाद।

उत्तर

2

ऐसा लगता है कि आपका संदर्भ विलय विफल रहा है।

developer documentation on error 133000

NSManagedObjectReferentialIntegrityError = 133000

NSManagedObjectReferentialIntegrityError Error code to denote an attempt to fire a fault pointing to an object that does not exist. The store is accessible, but the object corresponding to the fault cannot be found. Available in Mac OS X v10.4 and later. Declared in CoreDataErrors.h.

+0

अपने तेजी से उत्तर के लिए धन्यवाद। हम्म ... एक और धागे में, मैं बिना किसी त्रुटि के डेटा बचा सकता हूं। मैं मुख्य थ्रेड में # 133000 त्रुटि के बिना संदर्भ में उन्हें कैसे विलय कर सकता हूं? – Emmettoc

0

पहले, आप अपने त्रुटियों उतारना करने के लिए की जरूरत है। करने के लिए उत्पादन को बदलें:

NSLog(@"Error: %@\n%@", [error localizedDescription], [error userInfo]); 

है कि आप एक बहुत अधिक जानकारी दे देंगे।

दूसरा, यदि आप एकाधिक धागे में एक संदर्भ के साथ काम कर रहे हैं तो आप इसे गलत कर रहे हैं। आपको कोर डेटा और थ्रेडिंग पर प्रलेखन की समीक्षा करने की आवश्यकता है। मूल नियम है: एक संदर्भ प्रति थ्रेड; अवधि। यदि आपको एकाधिक धागे में डेटा प्रबंधित करने की आवश्यकता है तो मुख्य थ्रेड पर पृष्ठभूमि धागे से सहेजी गई सूचनाएं देखने में देखें। मैं इसके उदाहरणों के लिए मैक डेवलपर नेटवर्क पर अपने लेखों की समीक्षा करने का सुझाव दूंगा।

+0

धन्यवाद। मैं त्रुटि को विस्तार से जांचूंगा। हां, मैंने प्रत्येक थ्रेड के लिए संदर्भ बनाए। – Emmettoc

6

दो प्रकार के ऑब्जेक्ट आईडी हैं। NSManagedObject को सहेजने से पहले इसमें अस्थायी ऑब्जेक्ट आईडी है। इसे सहेजने के बाद तय किया गया है। तो तुम गलत आईडी का उपयोग कर सकते हैं ...

पढ़ें प्रबंधित वस्तु आईडी और यूआरआई यहाँ: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOs.html

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