1

任意のタイプのオブジェクトを参照するテーブルを実装したいと思います。たとえば、person、address、...からオブジェクトを参照するアーカイブテーブルです。

当然、すべてのテーブル(archivedPersons、archivedAddressesなど)に追加の関係を作成するのは好きではありません。「NSManagedObject」と単純に関係を持たせる方法はありますか?プロパティ「NSManagedObject」を保存し、アーカイブされたオブジェクトごとに1つのエントリを持つことも問題ありません。

4

3 に答える 3

1

それは可能ですが、自分でコーディングする必要があります。私があなたを正しく理解しているなら、あなたはあらゆる種類のオブジェクトとの多くの関係を望んでいます。

あなたがする必要があるのは、オブジェクトと一緒に(おそらく順序付けられた)オブジェクトIDのセットを保存することです。次に、CoreDataドキュメントの「非標準の永続属性」セクションで説明されている手法の1つを使用して、管理対象オブジェクト<->のオブジェクトIDのセットから変換する必要があります。

(からの)URLのセットがある場合は、-[NSManagedObjectID URIRepresentation]を使用してそれをシリアル化および非シリアル化できますNSPropertyListSerialization

1つは、それらをオブジェクトに変換できるURLのセットを持っていることです。これは物事が少しトリッキーになるところです。使用する必要がありますNSFetchRequest、それはエンティティごとにのみ実行できます。したがって、オブジェクトIDとともにエンティティ名を保存するのが最善です。

フェッチリクエストはコストがかかるため、-[NSManagedObjectContext objectRegisteredForID:オブジェクトに変換しようとしているすべてのオブジェクトIDに使用することをお勧めします。このメソッドが非nilを返す場合は、I / O(つまり、フェッチ要求)を実行せずに、そのオブジェクトを直接使用できます。nil次に、返されたこのメソッド(存在する場合)を使用して、これらのオブジェクトIDに対してのみフェッチ要求を実行します。

私はこれをしました。できます。しかし、それは簡単ではありません。

于 2012-05-05T13:17:27.627 に答える
1

残念ながら、あなたはちょっと立ち往生しています。基本エンティティを作成し、そこから他のエンティティを継承できます。次に、Base エンティティに対して 1 対多の関係を作成するだけです。

これはうまく機能し、あなたがそうすべきだと思うように。ただし、大きな欠点が 1 つあります。すべてのサブエンティティが 1 つのテーブルにグループ化されます。したがって、サブエンティティの属性ごとに列があります。大規模なデータベースがない場合は、これで問題ない可能性があります。または、行が約 70% 埋まっている場合、それも問題ない可能性があります。このオプションが実際に機能するかどうかを確認するには、どれだけのスペースが無駄になるかを調べる必要があります。

もう 1 つの方法は、一連のオブジェクト ID を保存し、参照されたオブジェクトを手動でフェッチすることです。

または、前に述べたように、エンティティ タイプごとに 1 つの参照を使用します。

于 2012-05-03T14:16:58.097 に答える
0

同じ問題があります(オフライン同期アルゴリズムの場合) そしてエラーがあります: **Misconfigured Property: Transactions.object must have a destination entity**

誤って構成されたプロパティ: Transactions.object には宛先エンティティ 0_0が必要です

そして、検索用のストア ID とテーブルの名前を除いて、適切な解決策を考えてください - need-entity へのリンクのストアド 1 に。このように: しかし、常にエンティティを探す必要はありません。o_0

BEFORE
@interface Transactions : NSManagedObject

@property (nonatomic, retain) NSNumber * type;
@property (nonatomic, retain) NSNumber * order;
@property (nonatomic, retain) NSManagedObject *object;



AFTER
@interface Transactions : NSManagedObject

@property (nonatomic, retain) NSNumber * type;
@property (nonatomic, retain) NSNumber * order;
@property (nonatomic, retain) Workgroup *workgroup;
@property (nonatomic, retain) AgendaItem *agendaItem;
@property (nonatomic, retain) Meeting *note;
@property (nonatomic, retain) Meeting *meeting;
@property (nonatomic, retain) Person *person;

しかし!オブジェクトを作成して削除すると、タイプと ID を保存する必要があることがわかります (( つまり、最後の解決は削除エンティティの場合には適していません。私の状況に属する解決は次のとおりです そして、テーブル名と ID によるエンティティの絶え間ない検索に自分自身を非難します 。テーブル名と ID o_o でエンティティを検索します

于 2012-10-24T16:32:58.653 に答える