5

非ドキュメント ベースの Cocoa アプリでウィンドウの復元に取り組んでいます。このアプリには、Mail.app のようなインターフェイスがあります。各ウィンドウはアカウントを表します。そのウィンドウのサイドバーにはそのアカウントの会話が一覧表示され、メイン領域には選択した会話のメッセージが一覧表示されます。

これらのリストはそれぞれ、ビューベースのNSTableViewです。会話リストは、ウィンドウ コントローラーのプロパティにバインドされてNSArrayControllerいるにバインドされます。メッセージ リストは 2 番目の にバインドされ、その2 番目の は最初の の選択にバインドされます。contentSetaccountNSArrayControllercontentSetNSArrayController

すべてのウィンドウを再度開き、それらをアカウント オブジェクトに再度関連付けるまで、ウィンドウの復元作業を完了しましたが、テーブル ビューの選択を復元する方法がわかりません。これは自動的には行われないようです。ウィンドウが復元されると、オブジェクトが選択されますが、それは以前に選択されたものではありません。何が起きてる?選択範囲を保存して復元する最も簡単な方法は何ですか?

4

1 に答える 1

5

お気づきNSTableViewのように、選択を自動保存しません。

最も簡単な方法は、 を にバインドし、NSTableViewから値を保存/取得することです。次に、アレイコントローラーをにバインドできます(コントローラーキーを使用すると、任意の名前を付けることができます)。保存するにはアーカイブ/アーカイブ解除する必要があるため、値トランスフォーマーを使用します。それ自体はうまくいくはずです。selectionIndexesArray ControllerselectionIndexesNSUserDefaultsselectionIndexesShared User Defaults ControllervaluesModel Key PathNSIndexSetNSKeyedUnarchiveFromData


テーブル ビューがすぐに再設定されなかったために、選択インデックスのリセットで私が行ったような問題が発生した場合 (バインディングを設定しているため、これらの問題が発生することはないと思います)、デフォルトを手動で保存できます。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setValue:[NSKeyedArchiver archivedDataWithRootObject:self.arrayController.selectionIndexes] valueForKey:vvLastSavedSelectionIndex];

そしてそれらを取得します:

NSIndexSet *selectionIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] valueForKey:vvLastSavedSelectionIndex]];
[self.arrayController setSelectionIndexes:selectionIndexes];
于 2012-08-08T17:24:40.150 に答える