2012-11-21 15 views
6

में ManagedObject को हटाने को हटाने के लिए उत्पन्न कारखाने विधि दस्तावेज़ में और व्यापक साहित्य में/आईओएस के लिए CoreData में एक subclassed प्रबंधित वस्तु को दूरहटाया जा रहा है या CoreData

(void)removeXXXObject:(NSManagedObject *)value 

वह जगह है जहाँ XXX इसी संबंध है या हम कर सकते हैं बस निकालें ऑब्जेक्ट का उपयोग करें।

मेरी कोड में मैं इस्तेमाल किया यह:

Data *lastData = [[self sortedPersonDatas] objectAtIndex:0]; 
[selectedPerson removePersonDatasObject:lastData]; 

जहां PersonDatas डाटा की एक-से-अनेक संबंध वस्तु कामयाब मैं पिछले डेटा ले लिया से (lastData सभी डेटा के क्रमबद्ध सरणी से हुई) है लेकिन पहले दो हटाने के तरीकों का उपयोग करके और एसक्यूएल डेटाबेस की जांच करने के बाद हम पाते हैं कि वास्तविक डेटा मौजूद है, केवल व्यस्त संबंध शून्य है। पूरी तरह से डेटा (सभी विशेषताओं और वस्तु) मैं का इस्तेमाल किया था हटाने के लिए:

[selectedPerson.managedObjectContext deleteObject:lastData]; 

प्रश्न: जो बेहतर तरीका है और यह कि CoreData डेटा बरकरार छोड़ देता है सही है?

+0

क्या आप अपने हटाए गए ऑपरेशन के बाद संदर्भ सहेजते हैं? –

+0

हां मैंने संदर्भ सहेजा, यह मुद्दा नहीं है। – BootMaker

उत्तर

7

removeXXXObject केवल एक ऑब्जेक्ट को कई रिश्तों से हटा देता है, लेकिन स्टोर से ऑब्जेक्ट को हटा नहीं देता है। ऐसा करने के लिए, आपको वास्तव में deleteObject का उपयोग करना होगा - यह वांछित व्यवहार है। कॉलिंग deleteObject डिफ़ॉल्ट रूप से इसी संबंध को शून्य पर सेट करेगा (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW1 देखें)।

+0

त्वरित उत्तर के लिए धन्यवाद, लेकिन मुझे पूरी तरह से विश्वास नहीं है कि यह व्यवहार सही है। आपके द्वारा उद्धृत दस्तावेज़ों के आधार पर, यदि आप रिश्ते को स्विच करते हैं (यहां: व्यक्तित्व डेटा) नियम को नलिका से कैस्केड तक स्विच करते हैं, तो इसे ऐप्पल दस्तावेज़ों में ऑब्जेक्ट को हटाना होगा: "रिश्तों के गंतव्य पर ऑब्जेक्ट हटाएं।" लेकिन जैसा कि मैंने कोशिश की है कि कैस्केड नियम के साथ "removeXXXObject" ऑब्जेक्ट को हटा नहीं देता है, जो नाराज नियम के समान परेशान होने वाले रिश्ते को खत्म कर देता है। अजीब। – BootMaker

+2

@ बूटमेकर: "नियम हटाएं: कास्केड" का अर्थ है: यदि कोई "व्यक्ति" ऑब्जेक्ट हटा दिया जाता है, तो सभी संबंधित "डेटा" ऑब्जेक्ट भी हटा दिए जाते हैं। इसका मतलब यह नहीं है: यदि संबंधित "व्यक्ति" से "डेटा" ऑब्जेक्ट हटा दिया जाता है, तो इसे हटा दिया जाता है। - तो "हटाएं नियम" निर्दिष्ट करता है: "क्या होता है यदि यह ऑब्जेक्ट हटा दिया जाता है?" –

+0

@ मार्टिन आर: आपने जो कहा वह मैंने पहले कैस्केड नियम के बारे में सोचा था, लेकिन ऐप्पल दस्तावेज़ों का क्या कहना अलग है, रिश्ते की गंतव्य वस्तु डेटा है। आपका प्रश्न: उत्तर को नहीं जानते क्योंकि यह मुद्दा नहीं है, लेकिन मैं इसे मज़ेदार करने की कोशिश करूंगा। – BootMaker

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