私のドキュメント ベースの Cocoa アプリケーションは、ドキュメントのコア データ ストアにバインドされた NSOutlineView/NSTreeController コンボを使用します。私の NSTreeController には fetch predicate がありisRoot == YES
ます。 isRoot
は一時的なブール属性で、デフォルト値はNO
です。私のルートモデルのawakeFromInsert
呼び出し:
[self setIsRoot:[NSNumber numberWithBool:YES]];
オブジェクトを階層に追加することはできますが、保存したばかりのドキュメントを読み込もうとすると、例外が発生します。
[<NSDictionaryMapNode 0x1001a8190> valueForUndefinedKey:]: this class is not key value coding-compliant for the key isRoot.
xcdatamodel で属性を non-transientに変更すれば、この例外を回避し、新しく保存したドキュメントを正常に読み込むことができますisRoot
が、transient フラグに関する私の理解に基づいて問題が発生することはなく、これは実際には問題ではありません。永続化する必要があるデータの種類。
また、適切な固定値を返すように NSManagedObject サブクラスに実装しようと-isRoot
しただけでなく、 内で同じsetIsRoot:
呼び出しを行ってみましたが、どちらも役に立ちawakeFromFetch
ませんでした。
私が見逃している他の微妙な点はありますか?フェッチ述語が一時属性をサポートしていないとは思えません。isRoot
Core Data の内部動作についてはよくわかりませんが、私の NSManagedObject サブクラスではなく、ストア固有のクラスを検索しようとしているのは興味深いようです。