假设我有一个应用程序,允许您在核心数据中创建一个简单的配置文件,该配置文件具有不同的用户属性,如姓名,性别,年龄等。创建并保存此实体Profile
。在潜入配置文件后,会显示一个表视图,其中包含从导入的sql数据库生成的数据,该数据库是使用使用核心数据模型预先填充数据的实用程序应用程序创建的。每个Car
也有各种属性,例如品牌,型号,年份,颜色等。
假设我希望能够在此tableview中单击每辆车并选择该字段。在执行此操作时,我希望将变量isSelected
设置为1
,以便跟踪用户已选择此数据库中的哪些车辆。
到目前为止,使用具有多对多关系的单Profile
可以很简单:Profile <-->> Car
。
问题
我遇到的问题是使用多个配置文件执行上述操作
模型设置为Profile <<-->> Car
-
有了多个配置文件,我无法弄清楚如何保持导入的sql数据库是静态的(因为这是每个新配置文件将开始的基础数据),然后有另一个数据库或实体或其他东西。我没有考虑每个isSelected = 1 or 0
的{{1}}属性。
起初我以为我可以通过这样做来创建每个Car
的副本:
Car
我认为这样我就可以创建每个Profile *_currentProfile;
for (loop through all cars in the db) {
Car *copiedCar = [NSEntityDescription insertNewObjectForEntityForName:@"Car" inManagedObjectContext:self.appDelegate.managedObjectContext];
copiedCar.make = originalCar.make;
copiedCar.model = originalCar.model;
...
[_currentProfile addCarObject:copiedCar];
}
的副本并将其放入当前Car
并修改Profile
属性,而不会影响原始数据库。这样就可以在不相互干扰的情况下制作更多的轮廓。当其他配置文件开始执行isSelected
的获取请求时,会出现问题。来自后续配置文件的获取请求,生成2x,3x,..,可用Car
的数量取决于创建的配置文件的数量,因为每个创建的配置文件将基本上生成另一个Car
的完整列表
问题 所以我的模型比上面的Car示例复杂一点,但想法是一样的..我应该如何构建Core Data模型以允许多个配置文件自定义现有的核心数据sql数据库,而不会有多个自定义干扰每个轮廓?此处不会有退出/退出功能。配置文件将显示在主屏幕上,您只需选择要输入的配置文件即可。我应该:
Car
使用Profile <<-->> Car <-->> Custom
实体中的isSelected
属性?我尝试了前两个,但我只是没有做正确的事情让自己感到困惑。
答案 0 :(得分:1)
如果您的汽车与配置文件有关系,那么使用这些关系会更改原始数据 - 因此您不能只更换它(尽管您可以对数据进行更新)。
如果您想保持源数据原始状态,以便您可以删除所有汽车并将其替换为其他数据,那么您需要为每个汽车提供唯一标识符,然后使用标识符列表更新配置文件。但是,对汽车的任何更新仍然需要他们保留相同的标识符。
因此,所有汽车都应该有一个唯一的标识符,你应该使用很多关系。你应该摆脱任何isSelected
标志(因为关系体现了这些信息)。唯一标识符允许您在将来更新汽车,而不必考虑它们与配置文件的关系。
如果您真正的问题是每个配置文件想要更改它所连接的汽车实例,那么您应该创建一个与汽车和配置文件实体有关系的新实体(并且可以取代汽车和汽车之间的直接关系)。轮廓)。该实体包含添加或覆盖汽车属性的属性。这个新实体只能与一辆汽车和一个配置文件相关联,两者都应该是必需的。汽车和配置文件都有这个新实体的许多实例。