0

由于我来自那些广泛使用 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 中填充实体及其属性?

4

1 回答 1

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)您可能希望这些项目具有更多属性,并且一个单独的实体将持有那些。

于 2013-01-24T22:20:13.793 回答