CoreData是Swift中必需的setValue(_:forKey :)吗?

Cla*_*lis 5 core-data ios swift

在CoreData中更新实体时,是否需要使用setValue(_:forKey:),或者您可以使用默认的setter设置值?

someEntity.setValue("Bob", forKey: "Name")

someEntity.name = "Bob"

第一种方法触发KVC,第二种方法不触发(正确?).

接受的答案确认上述内容不正确.默认情况下,@ NSManaged在Swift属性上启用KVC.

那么托管对象上下文是否无法识别更改?使用默认的setter有什么缺点吗?我在任何文档中都找不到明确的答案.我的测试显示它工作得很好,但有些东西我不知道将来会再次咬我吗?

我在任何文档中找到的最接近的答案来自使用Swift的Key-Value Coding下的Key-Value Coding Programming Guide

从NSObject或其子类之一继承的Swift对象默认情况下是符合其属性的键值编码.而在Objective-C中,属性的访问器和实例变量必须遵循某些模式,Swift中的标准属性声明会自动保证这一点.

vad*_*ian 5

不正确,两种方法都会触发KVC.

  • setValue(:forKey) 是一种通用的方法 NSManagedObject
  • 点表示法用于NSManagedObject访问@NSManaged属性的子类.该属性@NSManaged 启用 KVC.

两种方法都做同样的事情.

您甚至可以setValue(:forKey)NSManagedObject子类中使用,但建议使用点表示法(并且更方便,更不容易出错).