0

Core Data を使用するドキュメント ベース (OS X) アプリがあるため、ドキュメントは NSPersistentDocument のサブクラスです。ユーザーがドキュメントを作成するとき、管理オブジェクト モデル内の特定のエンティティが持つ属性の数を決定する設定を指定します。たとえば、"Baseball Game" エンティティは、ドキュメントの作成時にユーザーが指定した数に応じて、4 ~ 9 のイニング属性を持つことができます。効率化のために、指定されたイニング属性を正確に含む野球ゲーム エンティティを使用して、ドキュメントの作成時に管理対象オブジェクト モデルが生成されます。したがって、5 イニングのドキュメントは、9 イニングのドキュメントとは異なる管理対象オブジェクト モデルを持ちます。

管理オブジェクト モデルを動的に設定するには、ドキュメントでオーバーライド-(id)managedObjectModelする必要があります。これは些細なことであり、適切なイニング数でマネージド オブジェクト モデルを簡単に提供できます。ただし、ユーザーが保存されたドキュメント (不明なイニング数) を開くと、ドキュメントに管理オブジェクト モデルを与えるように再度求められます。-(id)managedObjectModel. 私の難問は、自分自身を知らない場合、ドキュメントに何イニングあるのかをどのように伝えることができるかということです。マネージ オブジェクト モデルは実行時に作成および設定されるため、イニング数を示す何らかのプロパティをドキュメントに追加することをお勧めします。ドキュメントごとに NSUserDefaults に似たものを考えていましたが、そのようなものはありません。私が考えることができる唯一の方法は、明示的にイニング数を与えるエンティティ/属性を保存することですが、ドキュメントに管理オブジェクトモデルを与えるまでアクセスできません! これについての適切な方法は何ですか?

4

1 に答える 1

2

実際、Core Data を使用している場合は、ドキュメントごとのようなものがありますNSUserDefaults。これは、永続ストア ファイルがファイルに関するメタデータを保存できるためです。そのメタデータは、何でも構いません。永続ストア コーディネーターを介してメタデータにアクセスします。私は使用していませんが、URL がドキュメントの URL と同じでない場合、サブクラスは正しい場所に到達するNSPersistentDocumentようなことを行うことができるようです。self.managedObjectContext.persistentStoreCoordinator.persistentStores

ただし、これは問題に対する間違ったアプローチのように聞こえることを付け加えておきます。複数のイニング インスタンスに関連するゲーム エンティティがあります。ほとんどの場合、正しい答えは、複数の独立したイニングの関係ではなく、ゲームからイニングへの対多の関係です。各イニングに次のように呼ばれる整数属性を与えてinningNumber、どれがどれであるかがわかるようにし、アプリのロジックで関係を範囲 [4, 9] に制限します。次に、はるかに低い複雑さで、探しているすべてのスペース節約の利点を得ることができます。プラスとして、ゲームのイニング数が異なる場合 (延長イニング?)、同じデータ モデルを使い続けることができます。

于 2014-08-09T22:42:35.200 に答える