سؤال

لدي تطبيق يستند إلى مستندات البيانات الأساسية التي يدعم التراجع / الإعادة عبر NSundOmanager المضمنة المرتبطة NSMANAGEDOBJECTEXTEXT. لدي بعض الإجراءات التي تم إعدادها تؤدي العديد من المهام داخل البيانات الأساسية، ولف كل هذه المهام في مجموعة تراجع عن طريق beginUndoGrouping/endUndoGrouping, ، ويتم معالجتها من قبل NSundOmanager.

التراجع يعمل بشكل جيد. يمكنني إجراء العديد من الإجراءات المتعاقبة، وكل منها تراجع عن كل واحد منها على التوالي والحفاظ على حالة تطبيقي بشكل صحيح. ومع ذلك، لم يتم تمكين عنصر القائمة "REDO" مطلقا. هذا يعني أن NSundOmanager يخبر القائمة التي لا توجد عناصر لإعادة.

أنا أتساءل لماذا ينسى NSundOmanager عن العناصر بمجرد التراجع، وعدم السماح بالحاجة إلى حدوث Redos؟

شيء واحد يجب أن أذكره هو أنني تعطيل تسجيل التراجع بعد فتح المستند / تم إنشاؤه. عندما أقوم بإجراء إجراء، أدعو enableUndoRegistration, beginUndoGrouping, ، أداء العمل، ثم اتصل processPendingChanges, setActionName:, endUndoGrouping, وأخيرا disableUndoRegistration. وبعد هذا يتأكد من أن الإجراءات المحددة فقط غير مقصودة، وأي تغييرات بيانات أخرى أقوم بها خارجها دون أن يلاحظها أحد على NSundOmanager. قد يكون هذا جزءا من هذه المشكلة، ولكن إذا كان الأمر كذلك أتساءل لماذا تؤثر على الإعادة؟

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول 2

لقد قمت بإصلاح هذه المشكلة عن طريق:

الحفاظ على تمكين التراجع عن التسجيل في كل وقت، باستثناء الأوقات التي ألا أرغب فيها بصراحة في تسجيل التركيب.

لقد تعلمت أن:

إذا قمت بتمكين التسجيل التراجع قبل إجراء التغييرات التي تريد تسجيلها، وتعطيلها مباشرة بعد أن ترتكب هذه التغييرات، فإن كومة إعادة NSundAmanager's Redo مطلقا.

لذلك، لا تتصل أبدا disableUndoRegistration.

نصائح أخرى

في الواقع، طالما كنت تتصل بالتمكين قبل كل من Nundo و-Redo (وتعطيل الخمر الإلكتروني بعدها)، يمكنك تحقيق ما كنت عليه.

أعتقد أنك كنت تتصل فقط بتمكين (/ تعطيل) مدونات مدخل قبل وبعد التغييرات في كائناتك المدارة. هذا يعني أن "التراجع" الخاص بك غير مسجل لدى مدير التراجع، وبالتالي لا يمكنك "إعادة" ذلك.

اتصلت بالتعطيل أثناء الحفاظ على تمكين "الإعادة". للقيام بذلك، قمت بتصفية NSundOmanager وشملت هذه الطريقة:

-(void) undo
{
  [[appDelegate managedObjectContext] processPendingChanges];
  [self enableUndoRegistration];
  [[NSRunLoop currentRunLoop] runMode: NSDefaultRunLoopMode beforeDate:[NSDate date]];
  [super undo];
  [[appDelegate managedObjectContext] processPendingChanges];
  [self disableUndoRegistration];
}

كما ذكر عن طريق ستيفانف في NSundOmanager، البيانات الأساسية والتراجع الانتقائي / الإعادة: "nsundomanager ينتظر دورة حلقة التشغيل التالية حتى يسجل التغييرات الخاصة بك"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top