由于我来自那些广泛使用sqlite的程序员,或许我只是很难掌握Core Data如何管理多种关系。
对于我的游戏,我在纸上有一个简单的数据库架构。
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中填充实体及其属性?
答案 0 :(得分:2)
正如您所描述的那样,它是一个名为Level
的核心数据实体,它有四个字符串属性。因为只有一个实体,所以没有关系。您将创建一个实体并添加属性,使其看起来就像您在上面描述的那样:
只获取一个Level
是基本的核心数据提取:
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...
如果是我,我会使用levelNumber
的一种数字类型,但也许您有理由在那里使用字符串。我也可能会将levelContent
分解为一个单独的实体,因为(a)逗号分隔的字符串很难看,无论你如何切片,以及(b)你可能希望这些项目具有更多的属性,以及一个单独的实体将拥有这些。