2009-12-30 6 views
4

Я хотел бы использовать NSUndoManager в приложении iPhone на объектах CoreData (NSManagedObject), чтобы я мог сохранить (и позже восстановить) состояние NSUndoManager, если приложение выходит преждевременно (скажем, из-за входящего звонка) , То есть в отличие от автоматического отбрасывания или сохранения изменений, накопленных в NSUndoManager, я хотел бы восстановить их, чтобы пользователь мог явно отменить или сохранить их при перезапуске приложения.Как восстановить содержимое NSUndoManager в объекте CoreData NSManagedObjectContext?

У кого-нибудь есть опыт? Может ли кто-нибудь рекомендовать этот (или альтернативный) подход к управлению ожидающими изменениями в NSManagedObjectContext, когда приложение прерывается?

ответ

2

NSUndoManager фактически не сохраняет состояние, он хранит стек действий, который восстановит состояние. Например, если у вас есть объект XXX, и у него есть имя свойства, которое является строкой, и вы меняете это имя с «Стив» на «Джо», то, что NSUndoManager хранит, является целью, селектором и объектом. Целью будет экземпляр XXX, селектор будет @selector(setName:), и объект будет @"Steve".

Сохраняя эту информацию, если стек отменить был выбит, он вызовет -setName: на экземпляр объекта XXX со значением @ «Steve» и, таким образом, восстановит его состояние. Существует еще одна работа над KVO и т. Д., Но это и есть основа.

Сначала я предположил, что вы можете написать NSManagedObjectID, селектор (используя NSStringFromSelector) и объект на диск и восстановить их, вызвав -registerUndoWithTarget: selector: object:. Однако при дальнейшем рассмотрении документации нет возможности получить доступ к стеку, чтобы иметь возможность перебирать его.

+0

К сожалению, я согласен. Кажется, что нет удобного и простого способа сделать это. Есть, конечно, обходы, но ничего элегантного не приходит в голову. –

0

Обратите внимание, что существует один возможный обход, используя отдельные NSManagedObjectContexts, так что некоторые из них сохраняются при завершении работы, тогда как другие имеют свои откаты. Это не идеально, но я нашел подходящее решение для моей проблемы с этой альтернативой.

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

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