से निष्पादित कोर डेटा प्रविष्टियों को पूर्ववत करना मैं कुछ कोड पर काम कर रहा हूं जो डेटा आयात करने के लिए NSOperation
का उपयोग करता है। मैं चाहता हूं कि उपयोगकर्ता आयात ऑपरेशन के दौरान बनाए गए NSManagedObject
उदाहरण पूर्ववत करने में सक्षम हो।मुख्य डेटा
जो मैं कह सकता हूं उससे, मुख्य थ्रेड से किए गए किसी भी ऑपरेशन के लिए NSManagedObjectContext
-undoManager
का उपयोग करना असंभव है। कोर डाटा प्रोग्रामिंग गाइड पर उपयोग अनुभाग से बन्दिश थ्रेड कन्करेंसी समर्थन करने के लिए, हम इन दो शर्तें:
- केवल objectId पारित किया जाना चाहिए प्रबंधित वस्तु संदर्भों के बीच ( अलग धागे पर)
- प्रबंधित ऑब्जेक्ट से पहले किसी संदर्भ में सहेजा जाना चाहिए ऑब्जेक्ट आईडी का उपयोग किया जा सकता है।
यह समझ में आता है के बाद से प्रबंधित वस्तुओं सार्वजनिक भंडारण (NSPersistentStore
) इससे पहले कि वे साझा किया जा सकता करने के लिए निजी भंडारण (NSManagedObjectContext
) में ले जाया जाना चाहिए।
दुर्भाग्यवश, -save:
संदेश पूर्ववत स्टैक को हटाने के लिए किसी भी प्रबंधित ऑब्जेक्ट का भी कारण बनता है। मेमोरी मैनेजमेंट का उपयोग करते हुए कोर डाटा एक ही गाइड की धारा से:
प्रबंधित ऑब्जेक्ट परिवर्तन (सम्मिलन, हटाए जाने, या अपडेट) लंबित हैं उनके संदर्भ जब तक उनके संदर्भ द्वारा बनाए रखा जाता है भेज दिया जाता है एक बचाने के : रीसेट, रोलबैक, या डेलोक संदेश, या पर पूर्ववत की उचित संख्या परिवर्तन को पूर्ववत करें।
मैं इस सीमा के आसपास काम करने के लिए कई बातें की कोशिश की है, और सब कुछ अंत में काम मुख्य थ्रेड पर हो रहा के थोक करने के लिए वापस ले जाते हैं (और समुद्र तट गेंदों कताई।) प्राप्त करने के लिए किसी भी सुराग बंद बनाई गई वस्तुओं के साथ काम करने को पूर्ववत मुख्य धागा बहुत सराहना की जाएगी।
-
एक वृद्धि रडार प्रस्तुत किया गया है: rdar://problem/8977725
क्यों न केवल इस ऑपरेशन द्वारा डाले गए सभी प्रबंधित ऑब्जेक्ट आईडी का लॉग रखें? इस तरह यदि उपयोगकर्ता इसे वापस रोल करना चाहता है तो आप ऑब्जेक्ट को फिर से हटा सकते हैं और हटा सकते हैं। यदि आपको उत्परिवर्तन वापस भी रोल करना होगा, तो कुंजी/मूल्य परिवर्तनों का रिकॉर्ड रखना भी मुश्किल नहीं है। पूर्ववत प्रबंधक में जूता-सींग की कोशिश करने से सरल लगता है। – ImHuntingWabbits
उपर्युक्त टिप्पणी के संबंध में, आप फिर से सौंपने का सुझाव कैसे देंगे? – wbyoung