これは、コアデータ関係を使用するのに適した状況です。
通常のApple Documentation(https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html)は、どのように動作するかをよく理解してくれます。
つまり、リレーションシップの場合、削除ルールを指定できます。 あなたの場合は、おそらく "Nullify"を選択します。つまり、テーブルを削除すると、Personのテーブルプロパティがnullになり、その人がテーブルに座っていないことを示します。
編集:テーブルと一緒に人を削除する「カスケード」を指定することもできます(無意味ですが、やや面白い考えです)。または、「拒否」を指定することもできます。これにより、少なくとも1人のユーザーがまだテーブルに座っている場合は、削除が中止されます。
例:
は、あなたが2つのエンティティがあるとし、 "TableInfo" と "PersonInfo"。 "PersonInfo"は "table"と呼ばれる
の関係を有し、 "TableInfo"は
の関係 "人"と呼ばれます。 "table"は "TableInfo"をターゲットとして1対1の関係です。 「人」は、「PersonInfo」をターゲットにした多対多の関係です。
「人」の「逆の関係」を「テーブル」に設定します。 「テーブル」の「逆の関係」は自動的に「人物」に設定されます。
あなたはCoreDataは、モデルのサブクラスを(あなたがすべき!)生成するようにすると、あなたはこのようなクラスで終わるだろう:あなたが見ることができるように
@interface TableInfo : NSManagedObject
@property (nonatomic, retain) NSSet *persons;
@end
@interface TableInfo (CoreDataGeneratedAccessors)
- (void)addPersonsObject:(PersonInfo *)value;
- (void)removePersonsObject:(PersonInfo *)value;
- (void)addPersons:(NSSet *)values;
- (void)removePersons:(NSSet *)values;
、CoreDataは自動的にappropiateアクセサを作成します。ちょうどそれらを使用します。
あなたは今、次の操作を行うことができます。要するに
TableInfo* myTable = [NSEntityDescription insertNewObjectForEntityForName:@"TableInfo" inManagedObjectContext:self.managedObjectContext];
PersonInfo* myPerson = [NSEntityDescription insertNewObjectForEntityForName:@"PersonInfo" inManagedObjectContext:self.managedObjectContext];
[myTable addPersonsObject:myPerson];
NSLog(@"%@", myPerson.table); // will be your TableInfo object "myTable"
、私は上記のリンク先のドキュメントを読んでください、たくさんの例があり、インターネットにあります。あなたはSOに関する質問を自由にすることができますが、インターネット上のチュートリアルは「基本的な」ニーズのためにより完全で役立ちます。
非常に便利です。しかし、例えば人をテーブルにどのように追加しますか?人はテーブルの属性ではなく、エンティティはエンティティの属性にすることはできません。 –
関係を定義し、CoreDataにクラスを作成させます。属性と同じリレーションシップにアクセスすることができます。つまり、[TableInfo addPersonInfo:]や[PersonInfo setTableInfo:]などが提供されます。 – JiaYow
これまでのおかげで、ごめんなさい。しかし、物事は明らかになっています。私のアプリケーションでのコアデータの使用は、Apple自身のCoreData Booksのサンプルコードに基づいています。たとえば、ユーザーはUINavigationViewControllerを使用してホップスルーし、ゲストを選択し、そのゲストの属性(名前や表など)を編集できます。この関係では、テーブル属性を通常のように扱いますか?しかし、その代わりに関係名をキーとして使用しますか?等 –