核心数据模型规划

时间:2013-07-09 09:56:11

标签: ios objective-c core-data database-design

看起来我很难决定规划我的核心数据模型结构,因为我不太了解核心数据在我的情况下需要如何工作。现在我有一个实体CustomerCity。每个都有很少的属性,现在没有关系。它们与其他对象有很多关系,因此它们是完全独立的对象。在我的Customer实体中,我有city属性(客户所在的城市)。它的值需要与name实体中的属性City(城市名称)的值相匹配。 Scheme如下所示:enter image description here

通过从Web解析JSON文件来形成City是别名的对象,现在这部分工作正常。我在Customer的NSManagedObject子类(从实体生成)中添加了一个方法,以从City实体检索name属性值并将其存储在city属性中:

- (City *)city 
{
     return (City *)[[PTDataFetchHelper sharedInstance] entityForName:@"City" withServerID:self.city_server_id inContext:[self managedObjectContext]]; 
}

这没有关系,但是我的UITableView(我使用NSFetchedResultsController,如源代码)开始使用这种提取工作非常慢。另外我理解使用这个方案我无法实现CustomerCity对象的搜索 - 我只能从一种实体中获取。我发现我可以为这两个创建父实体,但它们在逻辑上和结构上是独立的。解决这两个问题的最佳建筑方法是什么? 任何评论都赞赏。

1 个答案:

答案 0 :(得分:1)

一些观察结果:

  • 您已经刻意避免在模型中设置CityCustomer之间的关系。我不确定为什么根据我对你的要求的理解。您发表评论时“在NSManagedObject的{​​{1}}子类中添加了一个方法,以便从Customer检索名称属性值并将其存储在City属性中。” 但这不是你正在做的事情。您已为city上的city属性创建了一个getter方法,该方法在每次调用时都会从上下文中动态获取城市名称。这可能是您报告缓慢的原因。

  • 可以创建遍历关系的Customer。请看:

  • NSFetchRequestCustomer实际上并不是逻辑上独立的,因为City必须始终是customerInstance.city的名称,因为您现在已经构建了它。