我的处境很普通,主要是因为缺乏经验.
我的应用程序在第一次启动时将预构建的数据插入到DB中。我只是检查设备中是否存在分贝.如果它不存在,这是第一次启动,所以我在DB创建之后添加我的预构建数据。
在开发结束时,我决定激活iCloud,哇!只要一行代码就行了.我在不同的设备上尝试过,而我预先构建的数据显然是复制的:
我知道管理预构建数据的更好方法是使用多个持久存储,为预构建数据创建只读存储(我的预构建数据不需要用户修改,所以只读解决方案是可以的)。
问题是我在用户插入的数据之间有关系,所以我不能处理多个持久存储(核心数据不支持不同存储之间的关系)。
我看了一下获取的属性,但它似乎需要对我的代码进行超激烈的编辑。
我想用不复制的数据.因此,只要删除数据库中已经存在的数据,我就怀疑这个过程对关系来说确实是危险的,我如何才能删除这个对象,它只是在第一个launch?=中创建的“原始”对象的副本。
考虑到我的预构建数据不能被用户修改或删除,在您看来,这是纠正这个问题的最佳方法吗?
//编辑:关于模型的一些信息:
用户处理的实体(添加/编辑/修改)表示一个任务。这个实体有一个名称和一个类别。
类别是我预先构建的实体。
因此,用户为任务添加一个名称,并从预先构建的数据中选择一个类别。
发布于 2014-03-18 20:13:27
在分类实体中,在PrebuiltData模型中,创建一个"id“属性(并确保这在不同版本之间是一致的)这个模型不应该由iCloud来管理。
在任务实体中的UserData模型中,创建一个"categoryId“属性。这个模型应该由iCloud来管理(或者这个讨论是没有意义的)
现在,您可以在分类实体上创建一个方法,通过以下方法获取类别中的所有任务:
-(NSArray*)tasks
{
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Task"];
request.predicate = [NSPredicate predicateWithFormat:@"id = %@", self.id];
return [gTaskManagedObjectContext executeFetchRequest:request error:NULL];
}同样,您可以在Task实体上创建一个方法来获取类别:
-(Category*)category
{
NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Category"];
request.predicate = [NSPredicate predicateWithFormat:@"id = %@", self.categoryId];
NSArray* results = [gTaskManagedObjectContext executeFetchRequest:request error:NULL];
return results.count > 0 ? results[0] : nil;
}https://stackoverflow.com/questions/22488789
复制相似问题