2016-06-13 3 views
2

Я создаю приложение на основе OSX с использованием CoreData и NSUndoManager.Как я могу отменить удаление NSManagedObject без использования встроенного менеджера отмены?

У меня есть глобальный NSUndoManager, который обрабатывает Undoing и Redoing, вместо использования по умолчанию, встроенного в каждый NSManagedDocument. Это означает, что я регистрирую отмену и повтор вручную, вместо того, чтобы полагаться на них, чтобы они автоматически регистрировались при изменении контекста управляемого объекта.

Когда я удаляю NSManagedObject из NSManagedObjectContext, я хочу зарегистрировать отмену, которая восстанавливает удаленный объект. Я знаю, что это возможно, потому что встроенный NSUndoManager NSManagedDocument будет делать это по умолчанию, но попытка использовать объект после его удаления вызывает ошибку. Как восстановить фактический объект во время отмены?

ответ

1

Получил это решение. Простой ответ:

self.project.undoManager?.insert(object) 

Хитрая часть, если вы сохранили контекст управляемого объекта в постоянное хранилище, все свойства «объекта» гасятся. Если вы сохраните значения этих свойств заранее, вы можете переназначить их после новой вставки.

func removeAnObject(object: NSManagedObject) { 

    let property1 = object.property1 
    let property2 = object.property2 

    self.managedObjectContext?.deleteObject(object) 
    self.project?.undoManager?.registerUndoWithTarget(self, handler: { (object) in 

     self.managedObjectContext?.insertObject(object) 
     object.property1 = property1 
     object.property2 = property2 

     self.project?.undoManager?.prepareWithInvocationTarget(self).removeAnObject(object) 
    }) 
} 
+0

Вы управляли любым стеком для операций отмены отмены –

 Смежные вопросы

  • Нет связанных вопросов^_^