2

シェイクして元に戻す機能をサポートする CoreData ベースのアプリケーションがあります。これは現在正常に動作していますが、デバイスを振ると、NSUndoManager が通常無料で提供する通常の元に戻すプロンプトを最初に表示せずに、すぐに元に戻すことができます。

「元に戻すアーキテクチャ」ドキュメントから「iPhone での元に戻す」を読みました。

  • 実装canBecomeFirstResponder、復帰YES
  • ビューコントローラーbecomeFirstResponderを作るviewDidAppear
  • ビューコントローラーresignFirstResponderを作るviewDidDisappear
  • self.undoManagerビューコントローラーで読み取り/書き込みとして再宣言する
  • NSUndoManagerメソッドでand 設定self.undoManagerを作成しますUIViewController init(これが呼び出されることを確認しました)。
  • のセッターで に設定しself.managedObjectModel.managedObjectContext.undoManagerます。繰り返しますが、これが呼び出されていることを確認しました。これをしないと、元に戻す操作がまったく機能しません。self.undoManagermanagedObjectModel

私がすでに試したトラブルシューティング:

  • 元に戻すチェックは実際に機能します(管理対象オブジェクトモデルへの変更が元に戻されていることがわかります)
  • 検証canBecomeFirstResponderが呼び出されています
  • 元に戻す操作中にアクセサself.undoManagerが呼び出されているかどうかを確認します(そうではありません)。

だから私の質問は:

  • 元に戻すは機能するが、元に戻すプロンプトが表示されないのはどのような状況ですか?
  • これをトラブルシューティングするために、次に何を試しますか?
4

1 に答える 1

3

私は最終的にこれを追跡して、揺れの動きを手動でキャッチし、undoManager で undo を呼び出していたレガシー コードにたどり着きました。ビュー コントローラでの motionEnded: の実装。これが削除されると、元に戻すプロンプトが再び表示されるようになりました。

于 2010-12-01T09:35:01.093 に答える