2

CoreDataを使用して新しいImを使用してください。関係を見て少し助けが必要です。CoreDataの関係

私のアプリの問題で私はそれについて考えるようになりました。私は2つのエンティティ、TableInfoとPersonInfoを持っています。

テーブルには多くの人が座ることができますが、人は1つのテーブルにしか座ることができません。だから私はそれがその点で1対多の関係になることを知っており、現実の世界にも意味があります。

とにかく、私のアプリでは、私は人にテーブルを追加するので、私は基本的に、この人はこのテーブルに座って言う。ただし、私がすでに人に与えたテーブルを削除して削除すると、どうすれば処理できますか?

私はここで関係が成立すると考えていましたが、私は以前に彼らと働いたことがないので、どこに行くのか分かりにくいです。

この問題や詳細なコアデータの関係について助けとなる良いチュートリアルを知っている人、またはありがとうと感謝しています。この問題。

ありがとうございます!

答えて

3

これは、コアデータ関係を使用するのに適した状況です。

通常の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に関する質問を自由にすることができますが、インターネット上のチュートリアルは「基本的な」ニーズのためにより完全で役立ちます。

+0

非常に便利です。しかし、例えば人をテーブルにどのように追加しますか?人はテーブルの属性ではなく、エンティティはエンティティの属性にすることはできません。 –

+1

関係を定義し、CoreDataにクラスを作成させます。属性と同じリレーションシップにアクセスすることができます。つまり、[TableInfo addPersonInfo:]や[PersonInfo setTableInfo:]などが提供されます。 – JiaYow

+0

これまでのおかげで、ごめんなさい。しかし、物事は明らかになっています。私のアプリケーションでのコアデータの使用は、Apple自身のCoreData Booksのサンプルコードに基づいています。たとえば、ユーザーはUINavigationViewControllerを使用してホップスルーし、ゲストを選択し、そのゲストの属性(名前や表など)を編集できます。この関係では、テーブル属性を通常のように扱いますか?しかし、その代わりに関係名をキーとして使用しますか?等 –

0

講義12と、関係を設定する方法に関するshutterbugの例を見てください。彼はあなたのテーブルと人の関係と同じ写真関係を写真家に使っていました。この講義は、2010年秋の秋または春のために、iTunesUのCS193Pで引き続き利用できます。

スライドと例はこのリンクから入手できます。 http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-fall