問題タブ [nsundomanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
467 参照

iphone - NSUndoManager と Core Data によるネストされた元に戻す

NSUndoManager に少し問題があります。ユーザーがエンティティ A を編集しようとしているとき、変更を簡単に取り消すことができるように、すべてを元に戻すグループに貼り付けます。ここまでは順調ですね。

ただし、ユーザーがエンティティ A を編集している間、エンティティ B の項目を追加または編集することもできます。ここで、A には多くの B があり、B は多くの A に属しています。その関係はオプションです。

ここで、ユーザーが Foo というエンティティ A のアイテムの編集を開始するとします。編集中に、Bar というエンティティ B の新しいアイテムを作成します。その後、ユーザーは編集プロセス全体をキャンセルすることを決定したため、Foo への変更は取り消されますが、Bar も消えます。

エンティティ B の変更または追加を保持し、A の変更のみを元に戻すにはどうすればよいですか?

2 つの MOC を使用してみましたが、関係が原因で、2 つの異なるコンテキストのオブジェクト間の関係を追加するとエラーが発生します。

ありがとう!

0 投票する
3 に答える
4471 参照

iphone - UITextView で元に戻す/やり直す (iOS/iPhone)

UITextView に常にフォーカスがあるビューがあります。私がやりたいことは、組み込みの元に戻す/やり直し動作を拡張して、プログラムでテキストを設定するときの元に戻す/やり直しをサポートすることです (たとえば、テキストを @"" に設定してクリアするとき)。

元に戻す/やり直しイベントを取得するのは firstResponder だけなので、UITextView の undoManager プロパティを使用して呼び出しを作成するだけでよいと考えました。例えば、

残念ながら、これは機能していません。これ:

  1. 空のアイテムを元に戻すスタックに導入します (「元に戻す」)
  2. その項目の後に「Undo Clear」が追加されます(「Undo」をタップすると、「Undo Clear」が表示されます)
  3. ただし、[クリアを元に戻す] と [クリアをやり直す] は機能しますが、[クリアを元に戻す] が再び表示され、それ以降は機能しません。

何か案は?私はこれに間違って近づいていますか?

更新:空の元に戻すアイテムの問題を把握したようです: prepareWithInvocationTargetを呼び出した後に UITextView のテキストを設定すると発生します。以前に呼び出した場合、それは起こりません。面白いことに、prepareWithInvocationTarget を呼び出さないと (つまり、通常は UITextView のテキストを設定するとき)、空のアイテムが元に戻すスタックにプッシュされません。

0 投票する
1 に答える
830 参照

iphone - NSUndoManager が iOS で選択したメソッドを呼び出さない

OK、標準の Undo 動作を実行したい UITextView を備えたアプリがあります。このサイトと Apple Developer Docs で多くのチュートリアルと回答を調べましたが、作成したものが機能しない理由がわかりません。

UITextView が変更されるたびに (textView.inputView プロパティを使用して非標準のキーボードを使用しています)、以下のメソッドには、テキスト ビューに必要な新しいテキストである文字列が渡されます。

次に、UIButton が押されたときに元に戻す機能を実装します。

実行されます。

を使用して、ヘッダー ファイルで undoManager を宣言しました。

私の実装でそれを合成しましたが、元に戻すUIButtonを押しても何も起こらず、setTextは呼び出されません。どこが間違っていますか?

0 投票する
1 に答える
586 参照

iphone - CoreData アプリで Shake-to-undo が機能するが、元に戻す/やり直しのプロンプトが表示されない

シェイクして元に戻す機能をサポートする 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が呼び出されているかどうかを確認します(そうではありません)。

だから私の質問は:

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

nsundomanager - NSUndoManager はオブジェクトを保持しますか?

私は次のことを行います:

また、次のことを行うクリアボタンもあります。

問題は、removeAllActions がアプリをクラッシュさせることです。[pathToRemove autorelease] を削除すると、機能しました (または、少なくともクラッシュしませんでした。メモリ リークの可能性があります)。「prepareWithInvocationTarget」呼び出しで渡されたときに、undoManager が「pathToRemove」を保持していると想定していたと思います。

そうではありませんか?そうでない場合、'removeAllActions' への呼び出しが 'PathToRemove' オブジェクトを解放しているため、クラッシュが発生する可能性があります。しかし、それは非常にありそうもない NSUndoManager のバグであることを意味します。

'[pathToRemove description]' と '[path description]' の NSLog 出力が期待どおりに異なるアドレスを示すため、私の copyWithZone 実装が原因である可能性は低いと言えます。

どんな助けでも大歓迎です。ありがとう。

0 投票する
2 に答える
715 参照

core-data - willTurnIntoFault が複数回呼び出され、クラッシュする

NSManagedObject私のオーバーライドされた実装のサブクラスではwillTurnIntoFault、問題のオブジェクトを最初に作成したコードを元に戻すときに、 が 2 回呼び出されています。これにより、キー パスで KVO の登録を二重に解除しようとすると、クラッシュが発生します。

Apple のドキュメントによると、ここが KVO の登録を解除するのに適した場所です。

ちょっとしたコンテキスト - 元に戻す操作には、モデルの対応するビューをそのスーパービューから削除することが含まれます。ビューはそのモデルを保持します。

だから私の質問は:のサブクラスで 2 回呼び出される可能性があるプログラマ エラーの種類は何ですか?willTurnIntoFaultNSManagedObject

注: 以前deallocはこのクラスでオーバーライドしていましたが、NSManagedObject のサブクラスには推奨されないことに気付きました。それ以来、このコードを に移動しました-didTurnIntoFault。私は現在、Apple のドキュメントでオーバーライドしてはならないと言われている他のメソッドをオーバーライドしていません。

0 投票する
1 に答える
1993 参照

iphone - 元に戻すマネージャーの用途は何ですか? それの使い方?

iPhoneで元に戻すマネージャーの必要性は何ですか? サンプル プログラムでは、このようなボタンは見たことがありません。元に戻すとやり直しの意味と使い方を知っています。しかし、ここでの私の質問は、どの目的のために必要ですか? 私のアプリケーションでそれを使用する方法? 知っている場合は、良い例のコードリンクも提案してください...

ありがとうございました

0 投票する
3 に答える
3413 参照

cocoa - NSUndoManager、Core Data、および選択的な元に戻す/やり直し

私は、ツリーに似た管理対象オブジェクトのかなり大きな階層を持つコア データ アプリケーションに取り組んでいます。

基本オブジェクトが作成されると、いくつかの子オブジェクトが作成され、それらが独自の子オブジェクトを作成します。これらの子オブジェクトはそれぞれ、NSURLConnections を使用して情報を収集できます。

ここで、managedObjectContext の undoManager で元に戻す/やり直しをサポートしたいと思います。問題は、ユーザーがベース オブジェクトを作成し、そのアクションを元に戻そうとすると、ベース オブジェクトが削除されないことです。代わりに、1 つ以上の子オブジェクトが削除される場合があります。明らかに、この種のアクションは予測不可能で望ましくありません。

ということで、アンドゥ登録をデフォルトで無効にしてみました。disableUndoRegistration:これは、managedObjectContext で何かが変更される前に呼び出すことで行いました。次に、ベースオブジェクトの作成などのベース操作の前に登録の取り消しを有効にし、後で登録を再度無効にします。

元に戻そうとすると、次のエラーが表示されます。

undo: NSUndoManager 0x1026428b0 が無効な状態です。ネストされた undo グループが多すぎる状態で undo が呼び出されました

考え?

0 投票する
2 に答える
999 参照

iphone - なぜ NSUndoManager canUndo YES なのですか?

iPhone アプリで NSNumber のいくつかのメンバーを持つ管理対象オブジェクトを作成しました。これらの値を初期化します。サブオブジェクト メンバーも作成します。次に、初期化されたパラメーターに影響を与えることなく、サブオブジェクトに対して元に戻す操作を実行できるように、元に戻すマネージャーを作成します。ただし、アプリを起動して呼び出すと...

……「はい」です。どうすればいいの?トップレベルのデータ メンバーはゼロにリセットされます。それだけでなく、サブオブジェクトの managedObjectContext は nil です。これは、元に戻すマネージャーの作成前にサブオブジェクトが作成されたときにどのようになる可能性がありますか。元に戻すマネージャーは遡及的ですか? 元に戻すマネージャーを作成する前にこれらのデータ メンバーが設定されていても、マネージド オブジェクト全体の元に戻すことができるようです。

どんな洞察も高く評価されます。

0 投票する
1 に答える
2706 参照

iphone - CoreData を使用したネストされた取り消しグループ

coredata を利用した iphone アプリケーションにアンドゥ マネージャを追加したいと考えています。ユーザーが (+ ボタンをタップして) 新しいオブジェクトを追加しようとすると、新しいモーダル ビュー コントローラーが読み込まれ、viewDidLoad で新しい取り消しグループが開始されます。

ユーザーが [キャンセル] ボタンを押したときに、cancelAction コールバックの変更をロールバックしたいと考えています。

クエリ:

  1. ネストされた Undo グループを開始し、それをイベント ループを通じて保持し、1 つの Undo グループで行われたすべての変更を照合することは可能ですか? 現在、cancelAction で beginUndoGrouping を呼び出すと、見つからない beginUndoGrouping 例外が発生します。
  2. NSUndoManager の groupsByEvent API の重要性は何ですか? イベント ループを通じて元に戻すグループを永続化するには、NO に設定する必要がありますか?
  3. 変更を永続的にするには、saveAction コールバックで何をする必要がありますか (managedObjectContext で save を呼び出す以外に)? Undo Manager に変更の追跡を停止するように指示するにはどうすればよいですか?

エラーメッセージ:

*キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。理由: '_endUndoGroupRemovingIfEmpty:: NSUndoManager 0x75415f0 が無効な状態です。

サンプルコード: