Встряхивание работает в приложении CoreData, но подсказки отмены и повтора не отображаются - PullRequest
2 голосов
/ 19 ноября 2010

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

Я прочитал «Использование отмены на iPhone» из документа «Отменить архитектуру», и я:

  • реализует canBecomeFirstResponder, возвращает YES
  • создание контроллера вида becomeFirstResponder in viewDidAppear
  • создание контроллера вида resignFirstResponder in viewDidDisappear
  • повторное выделение self.undoManager в контроллере представления как чтение / запись
  • создание NSUndoManager и установка self.undoManager в методе UIViewController init (который, как я проверял, вызывается).
  • установка self.managedObjectModel.managedObjectContext.undoManager в self.undoManager в установщике для managedObjectModel. Опять же, я убедился, что это называется. Если я этого не сделаю, отмена вообще не работает.

Устранение неполадок, которые я уже пробовал:

  • проверка отмены действительно работает (я вижу, что изменения в моем managedObjectModel отменены)
  • проверка canBecomeFirstResponder вызывается
  • проверка, вызывается ли аксессор self.undoManager во время операции отмены (а это не так).

Итак, мои вопросы:

  • при каких обстоятельствах отменяет работу, но не показывает запросы отмены?
  • Что бы вы предприняли для устранения этой проблемы?

1 Ответ

3 голосов
/ 01 декабря 2010

Я в конечном итоге отследил это до некоторого унаследованного кода, который вручную перехватывал встряхивающее движение и вызывал отмену в undoManager; реализация motionEnded: в контроллере представления. Как только это было удалено, я снова начал получать запросы на отмену.

...