Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 了解核心数据查询(在数据中搜索唯一属性)_Xcode_Core Data_One To Many - Fatal编程技术网

Xcode 了解核心数据查询(在数据中搜索唯一属性)

Xcode 了解核心数据查询(在数据中搜索唯一属性),xcode,core-data,one-to-many,Xcode,Core Data,One To Many,由于我来自那些广泛使用sqlite的程序员,也许我很难理解核心数据是如何管理许多关系的 对于我的游戏,我在纸上有一个简单的数据库模式 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 amou

由于我来自那些广泛使用sqlite的程序员,也许我很难理解核心数据是如何管理许多关系的

对于我的游戏,我在纸上有一个简单的数据库模式

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。或者 不管我想要什么级别

我将如何建立我的关系,以便我可以提出这种类型的请求?
此外,我已经准备好了所有的数据,并提前知道它是什么。有没有办法在XCode中填充实体及其属性

正如您所描述的,它是一个名为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分解为一个单独的实体,因为逗号分隔的字符串很难看,不管你如何分割它们,b你可能希望这些项有更多的属性,而一个单独的实体会保存这些属性。

你只描述了一个实体,除非你以某种方式创建了一个以上的SQLite表。该实体似乎与自身无关,没有其他级别属性。我错过什么了吗?您认为可能存在什么关系?在一个普通的sqlite数据库中,您将拥有这个级别的表。这将添加我在上面描述的属性。我会在表1中插入,5:00,someString,someString,按照我的帖子的顺序。然后我会插入2,10:00,一些字符串,一些字符串。假设我有20个级别。我希望能够查询任何级别编号的levelTime、levelContent和levelMapping。因此,在sqlite术语中,从levelNumber为?1-20的级别选择levelTime、levelContent和levelMapping。我宁愿这样做,也不愿创建20个不同的实体。谢谢你的信息和建议,汤姆。我问题的第二部分涉及在XCode中预填充数据库,因为我已经提前知道了数据?除非我是瞎子,否则我看不见路。我希望能够说,‘好的,对于级别1,我希望映射、时间和内容是这样的。’。。第二级。。这个和这个…等等。我想另一个问题是,我该如何将某些属性与某个唯一的级别编号联系起来?如果不能在XCode中直观地完成,那么必须以编程方式完成,我认为我不理解第二个问题。您将使用Level所需的任何属性创建一个新实例,并保存结果。一旦您查找它,您就可以通过键值编码访问这些属性。你所做的只是向一个对象请求一个属性值,和其他任何对象一样。至于预填充数据存储,Xcode对你没有帮助。一种选择是使用一些只调试的代码构建数据存储,然后复制存储文件以进行常规应用程序构建。另一种方法是在Mac app store中使用第三方应用程序(如Core Data Editor)来输入数据。好的,感谢您对第二个问题的澄清。想知道为什么苹果不允许你在XCode中添加数据?我的意思是,他们创造了这个伟大的核心数据概念,然后他们让你悬而未决,似乎你必须去做的事情,如下载一个编辑器。