【问题标题】:Will Core Data populate inverse relationships when setting an NSSet relationship directly?直接设置 NSSet 关系时,Core Data 会填充反向关系吗?
【发布时间】:2014-02-20 03:38:45
【问题描述】:

举例:

我有一个实体User,还有一个实体Device

UserDevice 之间存在 To Many 关系,称为 devices

Device 与此关系相反,称为user


现在我收集、保存大量设备,例如一个网络服务,将它们合并成一个NSSet,然后我将它们绑定到一个特定的用户,所以我这样做了:

NSSet *collectedDevices = [API getSomeDevices];
someUser.devices = collectedDevices;

Core Data 会填充逆向 user 每个人的关系 Device 我吗? 它会观察关系的设置者吗?


背景:

我知道用于设置集合的 Core Data setter,但我想避免使用它们。我实际上是在使用 KVC 从 JSON 表示重建核心数据实体,没有硬编码的属性、关系,只是枚举它们的实体描述并设置匹配值。

【问题讨论】:

  • NSSet 是一组 NSManagedObjects 吗?
  • @k1th 是的。从服务器获取时,我在子上下文中创建了它们。
  • @MartinR 不,希望立即得到是/否的答案。
  • 您需要尝试一下。我不认为这些关系会跨上下文工作。通常 Coredata 会创建反向关系(通过设计)——它在我更简单的应用程序中对我有用。关于@dynamic 属性和覆盖KVO 有一些有趣的提示:stackoverflow.com/questions/6685407/… stackoverflow.com/questions/6191160/… 你为什么不在相同的上下文中做呢?
  • @k1th 有些情况下我不想保留结果,只检查。这就是为什么我需要一个临时上下文。

标签: ios core-data relationship


【解决方案1】:

是的,无论您使用属性、KVC 还是 Core Data 特定的方法(例如 -setPrimitiveValue:forKey:),Core Data 都会设置反向关系。

但是,when 它设置了逆可以稍微变化。它可以在某些情况下立即设置它,而在其他情况下它可能会等到运行循环结束来设置逆。只要所有相关的对象都是针对同一个NSManagedObjectContext 创建的,那么Core Data 就会维护引用完整性。

【讨论】:

  • 谢谢,这对我来说已经足够了。
  • 只是更多的事情。如果 Core Data 也可以通过简单的属性集工作,为什么还要创建像 -(void)addDevices:(NSSet*) values; 这样的方法?实际上,这种方法让我对这整件事持怀疑态度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
相关资源
最近更新 更多