0

私はsqliteを幅広く使用しているプログラマーから来ているので、CoreDataが多くの関係をどのように管理しているかを理解するのに苦労しているだけかもしれません。

私のゲームでは、紙に簡単なデータベーススキーマがあります。

Entity: Level - this will be the table that has all information about each game level

Attributes: levelNumber(String), simply the level number
          : levelTime(String), the amount of time you have to finish the level(this time will vary with the different levels)
          : levelContent(String), a list of items for that level(and that level only) separated by commas
          : levelMapping(String), how the content is layed out(specific for a unique level)

つまり、基本的にコアデータでは、データベースをセットアップして、fetchRequestで次のように言うことができます。

レベル1(または必要なレベル)のlevelTime、levelContent、levelMappingを教えてください

このタイプのfetchRequestを作成できるように、関係をどのように設定しますか?また、私はすでにすべてのデータを準備していて、それが何であるかを事前に知っています。XCode内にエンティティとその属性を設定する方法はありますか?

4

1 に答える 1

2

あなたが説明したように、それLevelは4つの文字列属性を持つと呼ばれる単一のCoreDataエンティティです。エンティティは1つしかないため、関係はありません。1つのエンティティを作成し、プロパティを追加して、上記で説明したように表示します。

ここに画像の説明を入力してください

1つだけを取得するLevelことは、基本的なCoreDataフェッチです。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Level"];
NSString *levelNumber = @"1";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"levelNumber = %@", levelNumber];
[request setPredicate:predicate];

NSError *error = nil;
NSArray *results = [[self managedObjectContext] executeFetchRequest:request error:&error];
NSManagedObject *level = nil;
if ([results count] > 0) {
    level = [results objectAtIndex:0];
}

// Use level...

私の場合は、の数値型の1つをlevelNumber使用しますが、文字列を使用する理由があるかもしれません。また、おそらくlevelContent別のエンティティに分割します。これは、(a)カンマで区切られた文字列は、どのようにスライスしても見苦しく、(b)アイテムにさらに多くの属性を持たせたい場合があり、別のエンティティが保持するためです。それらの。

于 2013-01-24T22:20:13.793 に答える