CoreData:通过关系访问对象

Posted

技术标签:

【中文标题】CoreData:通过关系访问对象【英文标题】:CoreData: Accessing Objects through Relationships 【发布时间】:2013-08-21 03:18:17 【问题描述】:

CoreData 中的三个实体:

User EntityA EntityB

关系:

EntityAUser 具有一对多关系和逆向 EntityAEntityB 具有一对一的关系并反向 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:通过关系访问对象的主要内容,如果未能解决你的问题,请参考以下文章

获取对象时无法访问一对多CoreData关系

Swift CoreData:访问关系比仅通过谓词获取要慢 - 是这样设计的吗?

使用一对多关系向 CoreData 添加新对象

通过UserNotification自定义操作访问时,CoreData无法初始化托管对象

保存期间CoreData比较错误

访问 CoreData 关系