4

私は窓のNSTextView中にいNSPersistentDocumentます。テキストフィールドの内容を「バイナリデータ」のCoreDataフィールドにバインドしますが、テキストビューにテキストを入力すると、テキストビューのフォーカスが失われるまで、ドキュメントのタイトルバーに「編集済み」と表示されません。したがって、編集後に終了すると、新しいデータは保存されません。

フラグをテキストビューバインディングに渡すとNSContinuouslyUpdatesValueBindingOption、「編集済み」がすぐに表示されますが、長いドキュメントではパフォーマンスが大幅に低下します。

すべての変更にすべてのテキストデータを実際に割り当てることなく、未保存の変更があることをCore Dataに通知するにはどうすればよいですか?

(この質問は、編集操作が非常に遅くなるため使用できないことを除いて、「バインドされたNSTextFieldはフォーカスを失うまでエンティティを更新しません」のようなものです。)NSContinuouslyUpdatesValueBindingOption

4

2 に答える 2

1

私が理解している限り、これは不可能だと思います。NSManagnedObjectのプロパティに変更を割り当てると、CoreDataは状態(および元に戻すもの)を管理します。データなしで日記を変更しようとすると、潜在的な保存操作は機能しません。

「ドキュメントアーキテクチャは無料で元に戻るサポートを提供します」を見て、ダーティ状態と元に戻るサポートがどのように実装されているかを見てください。

非常に大きなテキストドキュメントがある場合は、CoreDataプロパティに保存しないことをお勧めします。「インクリメンタルデータの読み取りと書き込み」で読むことができるように、テキストを別のファイルに保存し、NSFileWrapperを使用することをお勧めします。少なくとも、このソリューションをアプリケーションに使用しています。

これはところでです。CoreData自体がここで示唆していること「...ただし、BLOBをリソースとしてファイルシステムに保存し、それらのリソースへのリンク(URLやパスなど)を維持できる場合は、BLOBを次のようにロードできます。そして必要に応じて」

NSTextViewにどのようなテキストがあるのか​​わかりませんが、「長いドキュメント」について取り上げていました。

于 2013-06-08T06:48:47.063 に答える
0

「」をサブクラス化すると、 NSTextViewメソッドをキャッチできます。文字を入力するとすぐに、ドキュメントの「ドキュメント編集済み」フラグを設定します。強力な(CPUを集中的に使用する)バインディングは必要ありません。insertText:

于 2013-03-17T20:14:20.357 に答える