1

私のコアデータサブクラスの1つに。がNSSetありitemsます。NSOrderedSet代わりに順序付けされたを取得することはしばしば(常にではないので、そうではありません)便利なので、私はそれらをソートするクラスNSArrayに追加しました。orderedItems

その後、パフォーマンスの問題が発生したため、をキャッシュしてみることにしましたorderedItems。私の計画は、クラスでiVarを使用する_cachedOrderedItemsことです。これは、nullでない場合に返されます。

障害は、私のカテゴリの使用に付属しています。必要に応じてコアデータクラスを再生成し、すべてのカスタマイズを失わないように、すべてのカスタムコードをカテゴリに入れることに関するいくつかの良いアドバイスを読みました。それらのカスタマイズの1つはorderedItemsメソッドです。

カテゴリ自体でiVarを宣言できないようです。代わりにコアデータクラスに入れようとすると、カテゴリ内でアクセスできません。

カスタムコードをコアデータクラスに戻す必要がありますか?それとも私は何かが足りないのですか?

Mogeneratorについても聞いたことがありますが、役立つ場合はこれを使用する方法を学ぶことを検討します。

4

3 に答える 3

1

あなたはクラスを所有しているので、カテゴリの代わりにクラスの継続(ここで説明)を使用できます。これにより、インスタンス変数を追加できます。

于 2012-10-21T17:28:48.157 に答える
1

カテゴリ内を含め、元のクラスを変更できない場合はいつでも、連想参照を使用して ivar をクラスに追加できます。詳細な例については、連想参照を使用した Objective-C カテゴリのインスタンス変数の偽装を参照してください。

于 2012-10-21T16:41:43.283 に答える
0

あなたは間違いなくmogeneratorを使用する必要があります。たとえば、http://importantshock.wordpress.com/2006/12/19/mogenerator-or-how-i-nearly-abandoned-core-data/を参照してください。

XCode で Aggregate ターゲットを作成し、次のように Run Script を追加できます。

mogenerator -m path/to/your/datamodel.xcdatamodeld/version.xcdatamodel --template-var arc=true -M /CoreData/Generated -H /CoreData

NSManagedObjectクラスとサブクラスを取得するたびに。データモデルを更新するときに、スクリプトを再度実行すると、基本クラスが更新され、管理対象オブジェクトのサブクラスに加えたすべての変更が保持されます。--template-var arc=true円弧を削除します。

于 2012-10-21T20:54:18.673 に答える