मैं एक कोर डेटा एप्लिकेशन पर काम कर रहा हूं जिसमें वृक्ष के समान प्रबंधित वस्तुओं की बजाय बड़ी पदानुक्रम है।NSUndoManager, कोर डेटा और चुनिंदा पूर्ववत/फिर से
जब मूल वस्तु बनाई जाती है, तो यह कुछ बच्चे वस्तुओं को बनाता है जो बदले में अपने स्वयं के बच्चे की वस्तुएं बनाते हैं। इनमें से प्रत्येक बच्चे वस्तुएं NSURLConnections का उपयोग करके जानकारी एकत्र कर सकती हैं।
अब, मैं प्रबंधितObjectContext में undoManager के साथ पूर्ववत/फिर से समर्थन करना चाहता हूं। समस्या यह है कि, यदि कोई उपयोगकर्ता मूल वस्तु बनाता है, तो उस क्रिया को पूर्ववत करने का प्रयास करता है, मूल वस्तु को हटाया नहीं जाता है। इसके बजाय, एक या अधिक बाल वस्तुओं को हटाया जा सकता है। जाहिर है इस प्रकार की कार्रवाई अप्रत्याशित और अवांछित है।
इसलिए मैंने डिफ़ॉल्ट रूप से पूर्ववत पंजीकरण को अक्षम करने का प्रयास किया। प्रबंधितऑब्जेक्ट कॉन्टेक्स्ट में कुछ भी संशोधित होने से पहले मैंने disableUndoRegistration:
पर कॉल करके ऐसा किया था। फिर, बेस ऑपरेशंस से पहले पूर्ववत पंजीकरण सक्षम करना जैसे बेस ऑब्जेक्ट बनाना फिर से रजिस्ट्रेशन के बाद पुनः अक्षम करना।
undo: NSUndoManager 0x1026428b0 is in invalid state, undo was called with too many nested undo groups
विचार:
अब जब मैं पूर्ववत करने के लिए प्रयास करते हैं, मैं इस त्रुटि मिलती है?
आपका की जांच करनी चाहिए सेब का यह प्रलेखन: जब तक यह अपने परिवर्तनों
// do your stuff
// give the run loop a breath
[[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate date]];
[undoManager disableUndoRegistration];
यह मेरे लिए काम किया! –