問題タブ [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 投票する
4 に答える
5214 参照

iphone - UITextView での入力を元に戻す

iPhone SDK 3.0 を使用しています。

たとえば、アプリのデリゲートでに設定application.applicationSupportsShakeToEditして、 「シェイクして元に戻す」を有効にしました。YESRootViewController に UITextView を作成し、アプリの起動時にファーストレスポンダーにしました。

- (BOOL)textView:(UITextView *)aTextView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)textユーザーの入力内容に応じて、テキスト ビューを変更するために使用します。問題は、デフォルトの元に戻すアクションが台無しになっていることです。デバイスを振っても、「入力を元に戻す」が表示されなくなりました。

自分で元に戻すマネージャーを作成しようとしましたが、まだ成功していません。元に戻すマネージャーに何らかのアクションを登録させたにもかかわらず、デバイスを振っても何も表示されませんprepareWithInvocationTarget

誰にもアイデアがありますか?

編集: iPhone の WriteRoom の動作と TextExpander Touch SDK のサンプル コードを確認しました。どちらも、オートコンプリートが行われるまで振ると元に戻すオプションが表示されます。つまり、変更が setText: を介して textView にコミットされたときだと思います。そのため、textView のコンテンツを変更すると、元に戻すメカニズムに何らかの影響があります。

EDIT 2 :問題は、この場合、元に戻す機能をどのように組み込むことができるかということです。

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

nsundomanager - NSUndoManager の問題

Hillegass の本で元に戻す/やり直しの章を読みました。ただし、彼はドキュメントベースのアプリケーションについてのみ説明します。本にあるコードとほぼ同じコードを使用していますが、以下のコードを使用すると「appController may not response to -undoManager」と表示されます。Undo Manager を明示的に作成する必要があることはわかっていますが、正確にはどうすればよいのでしょうか。順を追って説明をお願いします。ありがとう。

-(void)insertObject:(Accounts *)currentAccount inArrayOfAccountsAtIndex:(int)index { NSLog(@"Adding %@ to %@", currentAccount, arrayOfAccounts);

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

iphone - NSUndoManager undo がコア データで機能しない

ユーザーがエントリを追加できる iPhone アプリケーションを作成しようとしています。彼が新しいエントリを押すと、いくつかの情報を求めるボックスがポップアップします。次に、[キャンセル] または [保存] を押してデータを破棄するか、ディスクに保存します。

保存には、かなりうまく機能する Core Data フレームワークを使用しています。ただし、「キャンセル」ボタンが機能しません。情報を求めるウィンドウが表示されたら、マネージド オブジェクト コンテキスト (MOC) に新しいオブジェクトを作成します。次に、ユーザーがキャンセルを押すと、MOC に属する NSUndoManager を使用しようとします。

また、ネストされたグループがある可能性があるため、ネストされた元に戻すグループを使用して実行したいと思います。

これをテストするために、簡単なアプリケーションを作成しました。アプリケーションは、Core Data が有効になっている単なる「ウィンドウ ベースのアプリケーション」テンプレートです。Core Data モデルの場合、整数属性 "x" を持つ "Entity" という単一のエンティティを作成します。次に、applicationDidFinishLaunching 内に、次のコードを追加します。

考え方は単純です。新しい Entity オブジェクトを挿入して元に戻し、MOC 内のすべての Entity オブジェクトを取得して出力してみてください。すべてが正常に機能した場合、最後にオブジェクトは存在しないはずです。

ただし、次の出力が得られます。

ご覧のとおり、オブジェクトの作成を元に戻そうとすると、MOC にオブジェクトが存在します。私が間違っていることに関する提案はありますか?

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

core-data - NSUndoManagerとコアデータ-やり直しが機能しない

NSManagedObjectContextに関連付けられた組み込みのNSUndoManagerを介した元に戻す/やり直しをサポートするCoreDataドキュメントベースのアプリがあります。Core Data内で多数のタスクを実行し、これらすべてのタスクをbeginUndoGrouping/を介してUNDOグループにラップendUndoGroupingし、NSUndoManagerによって処理されるいくつかのアクションを設定しています。

元に戻すは正常に機能します。いくつかの連続したアクションを実行できます。その後、それぞれを連続して元に戻すと、アプリの状態が正しく維持されます。ただし、「やり直し」メニュー項目は有効になりません。これは、NSUndoManagerがメニューにやり直す項目がないことを通知していることを意味します。

NSUndoManagerが、元に戻されたアイテムを忘れているように見え、REDOの発生を許可していないのはなぜですか?

私が言及しなければならないことの1つは、ドキュメントが開かれた/作成された後に元に戻る登録を無効にしているということです。アクションを実行するときは、、を呼び出し、enableUndoRegistrationアクションを実行してから、、、、を呼び出し、最後に。beginUndoGroupingを呼び出します。これにより、特定のアクションのみが元に戻せるようになり、これら以外で行った他のデータ変更はNSUndoManagerに認識されなくなります。これは問題の一部かもしれませんが、もしそうなら、なぜそれがやり直しに影響を与えているのか疑問に思いますか?processPendingChangessetActionName:endUndoGroupingdisableUndoRegistration

前もって感謝します。

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

cocoa - テキストビュー用の複数のUNDOマネージャー

モデルオブジェクトに格納されている属性付き文字列からコンテンツを取得するテキストビューがあります。これらのモデルオブジェクトのいくつかをドロワーにリストし、ユーザーが1つをクリックすると、テキストビューがそのコンテンツを交換します。

ここで、元にたりマネージャーをテキストビューに交換する必要があります。モデルオブジェクトでundoマネージャーを初期化し、undoManagerForTextViewを使用してテキストビューに戻しますが、何かが正しくありません。

戦略的に配置されたロギングステートメントは、すべてが計画どおりに機能していることを示しています。起動時に、新しいモデルオブジェクトが正しく初期化され、null以外のUNDOマネージャーが常にテキストビューによってプルされます。しかし、実際に元に戻すことになると、私は自分が望む動作を得ることができません。

ウィンドウを開き、何かを入力してcmd + zを押すと、元に戻すことができます。ウィンドウを開き、何かを入力し、テーブルで新しいモデルを選択し、何かを入力し、最初のモデルに戻って元に戻そうとすると、ビープ音だけが鳴ります。

ドキュメントの何かが私に眉を上げさせました。それは、いくつかのモデルオブジェクトで元に戻すことができないことを意味するからです。

デフォルトの元に戻すおよびやり直しの動作は、フィールドまたはセルが最初のレスポンダー(つまり、キーボードアクションのフォーカス)である限り、テキストフィールドおよびセル内のテキストに適用されます。挿入ポイントがフィールドまたはセルを離れると、以前の操作を元に戻すことはできません。

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

iphone - iPhoneのNSUndoManagerから状態データをシリアル化する

iPhoneアプリで元に戻す/やり直しを設定しました。現在、保存状態を確認しているので、ユーザーがアプリを終了してから再度起動すると、元に戻す/やり直しを含め、すべてが同じ状態になります。スタック。NSUndoManagerをシリアル化する明確な方法がわかりません。これを達成するための良い方法はありますか?

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

iphone - iPhone SDK で NSUndoManager を使用して元に戻す/やり直す

NSUndoManager クラスを使用してアプリの 1 つで元に戻す/やり直し機能を設計しようとしており、設計上の問題がいくつか見られます。私のアプリでは、メソッドは 1 つだけです

そのため、ユーザーが UI でボタンを選択すると、ボール オブジェクトが配列リストに追加されます。ただし、ボールを削除するためのアクション ボタンはありません。これは UI ワークフローの設計であり、変更できません。したがって、取り消しを実装するために、addLastBall メソッド内で次のコードを呼び出しました。

これを行った後、ユーザーが取り消しを実行しようとすると、ボール オブジェクトで removeBall メソッドが呼び出されます。今のところすべて問題ありません。しかし、ユーザーがやり直そうとしたときに、どのメソッドが呼び出されるのかわかりません。ユーザーが元に戻す操作を使用して削除したばかりのボール オブジェクトを追加する必要があるためです。どんな洞察も非常に役に立ちます。

本当にありがとう。

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

core-data - コアデータは、複数の実行ループサイクルにまたがるアクションの合体を元に戻します

ユーザーが画面上でオブジェクトをドラッグできるコアデータベースのUIKitアプリケーションがあります。オブジェクトがドラッグされている間、各touchesMoved:イベントでその位置属性を更新します。ドラッグ操作の取り消しを一度にサポートするために、ドラッグの開始時に新しい取り消しグループを開始し、ユーザーが指を離したときにグループを終了します。

メモリを節約し、元に戻す操作を高速化するために、ドラッグ操作に属する元に戻るデータを合体させたいのですが、CoreDataではこれが困難です。問題はprocessPendingChanges、各実行ループサイクルの最後に呼び出され、CoreDataにその反復で発生した位置変更の新しいUNDOレコードをファイルするように強制することです。ドラッグ操作では、このような元に戻すレコードを何百も簡単に蓄積できますが、最初のレコードを除くすべてが不要です。

Core Dataの魔法の組み込みアンドゥサポートを使い続ける方法はありますが、そのような重複したアンドゥレコードで貴重なメモリを無駄にすることはありませんか?元に戻す/やり直し操作全体でオブジェクトグラフの一貫性を維持する必要がないのは気に入っていますが、これらの継続的な属性の更新を正しく処理できないことは、目を見張るもののようです。

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

objective-c - 1 つの NSWindow に対して複数の NSUndoManager を実装することは可能ですか?

複数のビューを持つウィンドウがあります (それらはすべてサブクラスNSViewであり、常に 1 つしか表示されません) パスを描画します。私は for each ビューを持ちたいのですNSUndoManagerが、明らかにそれらはすべてNSUndoManagerから来て同じ を持っていNSWindowます。

これは可能ですか?

Thx xonic

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

objective-c - isDocumentEditedの通知を取得する

変更のたびにwill/didChangeValueForKey:メソッドを呼び出さずに、NSDocumentのisDocumentEditedプロパティの通知をバインド/取得することは可能ですか?