0

趣味のココアプログラマーです。すべての通常の場所を見回してきましたが、これは比較的説明不足のようです:

  • ちょっと変なこと書いてます。これは、デスクトップ パブリッシング アプリよりもはるかにシンプルですが、それに似ています。任意に配置された、キャンバス上の編集可能なテキスト ボックスが必要です。

  • これはドキュメントベースで、Core Data を使用したいと思っています。

現在、ココアのテキスト処理システムは、NSTextStorage、NSLayoutManager、NSTextContainer、そして最後に NSTextView の 4 つのクラス構造を扱っているようです。私はこれらを調べて、それらの使用方法を知っています。いくつかのプロトタイプを作成しており、単純なアプリで機能します。

永続化すると問題が発生します。Cocoa Bindings などを使用して、管理対象オブジェクト コンテキストに NSTextStorage (= 実際のテキスト) の内容を格納する方法がわかりません。

これらのオブジェクトで、-words、-setWords: などのメソッドのペアをオーバーライドすることを検討しました。これにより、Core Data に格納する方法を知っている文字列に単語をリンクできます。ただし、テキストに影響を与えるメソッドはすべてオーバーライドする必要があります。

洞察に感謝します。

4

2 に答える 2

0

NSTextStorage は、NSCoding プロトコルをサポートする NSMutableAtrributedString の単なるサブクラスであるため、デフォルトの NSKeyedUnArchiveFromData 変換を使用して変換可能な属性として Core Data に保存できます。

ビューの可能性のある例外を除いて、保存したい他のすべてのクラスに当てはまると確信しています。(コアデータに保存しようとしたことはありませんが、理論的には可能です。)

NSCoding を実装/継承するクラス、またはinitWithCoder: メソッドを持つクラスは、変換可能な属性としてコード データに格納できます。

于 2010-06-12T16:27:34.470 に答える
0

valueテキスト ビューのバインドをモデル エンティティの 1 つの文字列属性にattributedStringバインドするか、変換可能な属性にバインドすることをお勧めします。これにより、テキストを自分でやり取りしなくても、ビューがモデルに接続されます。

于 2010-06-13T00:30:50.563 に答える