2011-12-08 14 views
10

से परिवर्तन साफ़ करें मैं आवेदन प्रतिनिधि स्तर पर NSManagedObjectContext ऑब्जेक्ट को तुरंत चालू कर रहा हूं और इसे अपने सभी UIViewController एस में साझा कर रहा हूं। यहाँ कोड है कि मैं अपने दृश्य नियंत्रकों में से एक में इसे उपयोग करने के लिए उपयोग:कोरडाटा: NSManagedObjectContext

 NSManagedObjectContext *managedObjectContext = appDelegate.managedObjectContext; 
     modelObj = (Model *) [NSEntityDescription insertNewObjectForEntityForName:@"Model" inManagedObjectContext:[appDelegate managedObjectContext]]; 

अब इस स्क्रीन में, मैं एक UITableView 9 के साथ पंक्तियों & प्रत्येक कोशिका एक UITextField है की है। चूंकि उपयोगकर्ता टेक्स्टफील्ड में मान इनपुट करता है, इसलिए मैं उन्हें modelObj में असाइन करता हूं। अब, मेरे उपयोगकर्ता के पास सभी परिवर्तनों को रद्द करने और त्यागने या डिस्क पर सहेजने का विकल्प है। मेरे पास सेव कोड ठीक काम कर रहा है। लेकिन जब कोई उपयोगकर्ता परिवर्तनों को त्यागने का प्रयास करता है, तो मुझे यकीन नहीं है कि क्या करना है। उन्हें दूर फेंकने के लिए [managedObjectContext discardChanges] विधि प्रतीत नहीं होती है।

मैं इस को हल करने के तरीके के एक जोड़े के बारे में सोच सकते हैं।

  • प्रत्येक नियंत्रक के लिए प्रत्येक नियंत्रक के लिए NSManagedObjectContext का एक नया उदाहरण बनाएं।
  • या, मैं अपने कोड में NSString रों का एक समूह बना सकते हैं और उन में उपयोगकर्ता मान बचाने के लिए और फोन insertNewObjectForEntityForName: केवल यदि उपयोगकर्ता क्लिक बचा सकता है।
किस तरह

सही एक है? या NSManagedObjectConext बनाने के लिए कोई तरीका है जो इसे किए गए सभी परिवर्तनों को त्यागें?

धन्यवाद,
तेजा।

+1

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

उत्तर

36

NSManagedObjectContext इस के लिए एक सरल विधि है:

[managedObjectContext rollback]; 

इस विधि "पूर्ववत ढेर से सब कुछ, सभी सम्मिलन और विलोपन को छोड़ देता है, और उनके पिछले प्रतिबद्ध मूल्यों के लिए वस्तुओं अद्यतन पुनर्स्थापित करता निकाल देता है।" (documentation)

जब तक मैं कुछ याद कर रहा हूँ, कि तुम सब कुछ आप की जरूरत है देना चाहिए।

+2

चूंकि प्रश्न आईओएस के साथ टैग किया गया है, इसलिए यह उल्लेख करना उपयोगी हो सकता है कि रोलबैक विधि के लिए आवश्यक है कि एमओसी को 'पूर्ववत प्रबंधक' असाइन किया गया हो, जो आईओएस के मामले में मेरा मानना ​​है कि यह डिफ़ॉल्ट रूप से नहीं है और इसलिए 'रोलबैक' करेगा कुछ भी तो नहीं। –

+1

यहां @ क्रिस्टोफरकिंग की टिप्पणी [सेब डॉक्स] का समर्थन करने वाला संदर्भ है (https://developer.apple.com/library/ios/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/#//apple_ref/occ/instp/NSManagedObjectContext/undoManager)। 'पूर्ववत' या 'रोलबैक' संचालन का समर्थन करने के लिए अपने 'NSManagedObjectContext' में' NSUndoManager' को जोड़ना सुनिश्चित करें। –

2

आप -refreshObject:mergeChanges: की तलाश में हो सकता है - डॉक्स कहना है कि यह लगातार की दुकान से एक वस्तु को रीसेट करता है, और यदि आप दूसरा तर्क के रूप में NO गुजरती हैं, आप परिवर्तन है कि किए गए हैं पुन: लागू करने के लिए नहीं चुन सकते हैं।

इस आवश्यकता की संभावना होगी आप वस्तुओं है कि आप (पहला तर्क के लिए) को बदल दिया है का एक सेट तो स्पष्ट स्टोर करने के लिए, कि सेट आप स्टोर करने के लिए अपने संदर्भ में परिवर्तन जब करते हैं। हालांकि, यह एक बहुत ही मामूली जोड़ होना चाहिए।

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