11

メイン ウィンドウで NSOutlineView を使用して、小さなドキュメント ベースのアプリケーションを開始しました。モデルクラスで NSCoding プロトコルを使用してモデルをファイルに保存しましたが、すべて問題ありません。

次に、ユーザー インターフェイス (ウィンドウのサイズと位置、アウトライン ビューで展開された項目、選択など) を保存したいと考えていたところ、Lion に再開機能が追加されていることがわかりました。

そこで実装してみました、メインウィンドウとアウトラインビューに自動保存名を追加し、autosaveExpandedItems プロパティを設定して、アウトラインビューのデータソースに OutlineView:itemForPersistentObject: と OutlineView:persistentObjectForItem: メソッドを実装しました。

それは機能しますが、別のファイルを作成/開いてから閉じると、他のファイルの展開されたアイテムの状態が閉じたファイルの状態に設定されます。

アプリは、ドキュメントごとに 1 つのウィンドウではなく、すべてのドキュメントに対して 1 つのウィンドウのみを保存するようです。

自動保存と再開について少し迷っています。同じ機能ですか、それとも 2 つの機能がまったく異なるのですか?

ウィンドウの状態を保存するために使用できますか、それともモデルに保存する必要がありますか?

ありがとうございました

4

1 に答える 1

1

これは約 3 年遅すぎると思いますが、ここにたどり着く人の助けになるかもしれません。

私はまだ Cocoa の専門家でもプロの Mac 開発者でもありません (まだ学習中です)。

ウィンドウごとおよびコントロールごとに状態データの保存を実装することは、単にそれを単一のインスタンスに関連付けるだけである場合があります (すべて xib に事前にロードされ、単一の自動保存名に関連付けられているため)。しかし、私は間違っている可能性があります。これについて。詳しい人なら誰でも自由に訂正できます。

おそらく、ウィンドウではなく NSDocument レベルで状態情報を保存してから、ドキュメント データからプルして実装window(window: NSWindow, willEncodeRestorableState state: NSCoder)してみてください。window(window: NSWindow, didDecodeRestorableState state: NSCoder)

もちろん、現在のウィンドウのドキュメントに簡単にアクセスできます。view.window?.windowController?.document as? YourNSDocumentSubclass

これは多かれ少なかれ私がやっていることであり、これまでのところ有望なようです. 他の建築の達人がより多くの洞察を提供してくれるかもしれません。

于 2016-05-04T04:05:20.587 に答える