2

コアデータでエンティティを作成する必要があります:

ゲームとプレーヤー

ゲーム - 次のようになります (簡略化): ボードのユーザー ID

PLAYERS のユーザー ID 名

プレイヤーはユニークです

GAMES を選択し、PLAYERS.name 列をこの結果に追加する必要があります。

すべてのコアデータと関係を設定し、「テーブル」から選択して、配列とテーブルビューに配置できます。

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"GAMES" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
GamesARRAY =[context executeFetchRequest:fetchRequest error:&error];

等々....

しかし、どうすればプレイヤーテーブルからデータを選択したりアクセスしたりできますか? 基本と理論はすべて知っていますが、実際にはコード例が必要です。次のような答えだけではありません:NSSetを使用するなど..

4

3 に答える 3

3

CoreData はデータベースではありません。

もう一度繰り返しましょう。

CoreData はデータベースではありません。

のように考えないでください。

CoreData は、オブジェクト関係グラフの管理および永続化フレームワークです。

特定のゲームのプレイヤーにアクセスしたい場合、なぜuserid両方のエンティティでフィールドを使用するのですか? 代わりに CoreData 関係を使用する必要があります。そうすれば、考える必要さえありません。ゲームの関係プロパティにアクセスするだけで、プレーヤーを取得できます。その逆も同様です。

エンティティの名前も変更する必要があります。GAMES と PLAYERS はテーブル名としては意味があるかもしれませんが、GAMES*1 つのゲームを表すオブジェクトをコード内に置きたいとは思わないでしょう。Gameそれらに名前を付けてみませんPlayerか?

于 2012-12-07T19:08:32.023 に答える
0
[[game valueForKey:@"player"] valueForKey:@"name"]

または、関連するクラスを設定している場合は、

game.player.name
于 2012-12-07T19:20:43.467 に答える
0

あなたは実際にエンティティGAMESを知っている関係を持っていますか? PLAYERSその場合、任意のGAMESオブジェクトについて、その関係 ( ) をトラバースしてgame.player、ゲームのプレーヤー オブジェクトのプロパティを取得できます。Core Data では JOIN 自体は行いません。Core Data はリレーションシップを使用して、外部キーや JOIN などを抽象化します (たとえば、これらは SQLite バックエンドの舞台裏で行われますが)。

また、Kevin が指摘しているように、Core Data エンティティの賢明な命名規則を破りますGAMES。はるかに優れています。PLAYERSGamePlayer

于 2012-12-07T19:10:22.457 に答える