CoreData:通过关系访问对象
Posted
技术标签:
【中文标题】CoreData:通过关系访问对象【英文标题】:CoreData: Accessing Objects through Relationships 【发布时间】:2013-08-21 03:18:17 【问题描述】:CoreData 中的三个实体:
User
EntityA
EntityB
关系:
EntityA
与 User
具有一对多关系和逆向
EntityA
与 EntityB
具有一对一的关系并反向
User
& EntityB
没有关系
创建的对象:
UserA
创建一个 objectA
类型 EntityA
列出 UserB
和 UserC 作为关系对象。
UserA
还创建 EntityB
类型的 ObjectB
,列出 ObjectA
,作为其关系对象
访问对象
UserB
登录并获取EntityA
并成功下载ObjectA
。
问题:UserB
可以访问ObjectB
吗?如果是这样,UserB
是否可以使用以下代码访问 ObjectB:NSString *value = [ObjectA.OneToOneRelationshipBetweenEntityAandB valueForkey"@attributeFromObjectB"];
如果没有,UserB
如何访问ObjectB
?我需要建立什么样的关系?
我之前曾问过一个类似的问题,但我认为我提供了太多信息并使其混乱。我删除了这个问题,并希望将其简化为这个问题。
谢谢。
【问题讨论】:
“用户 A 创建 ...”或“用户 B 登录 ...”是什么意思?每个登录用户是否有单独的数据库(持久存储)? - 你试过了吗?你有遇到什么问题吗? 【参考方案1】:假设一个统一的核心数据模型,只要有关系就可以轻松访问对象。
为了可读性,我重新定义了你的变量/关系名称:
User <<-----> Group <<-----> Community
社区有很多组有很多用户。这很简单,看起来像是一个可行的设置。
澄清:用户不能创建对象。只有程序才能做到这一点。
Group *newGroup = [NSEntityDescription
insertNewinsertNewObjectForEntityForName:@Group"
inManagedObjectContext:self.managedObjectContext];
Community *newCommunity = [NSEntityDescription
insertNewinsertNewObjectForEntityForName:@Community"
inManagedObjectContext:self.managedObjectContext];
userA.group = newGroup;
userB.group = newGroup;
newGroup.community = newCommunity;
现在 userA 和 userB 都属于 newGroup 并且该组是 newCommunity 中的组之一。 userB 已链接到该组,因此访问社区非常容易:
Community *aCommunity = userB.group.community;
【讨论】:
以上是关于CoreData:通过关系访问对象的主要内容,如果未能解决你的问题,请参考以下文章
Swift CoreData:访问关系比仅通过谓词获取要慢 - 是这样设计的吗?