【发布时间】:2018-12-10 21:57:32
【问题描述】:
我正在尝试传递键值对并通过循环更新属性。
func update(storableClass : NSManagedObject.Type, id: ID, fields: [String : Any]) throws {
// retreive manaagedObject
for (key, value) in fields {
manaagedObject.setValue(value, forKey: key)
}
}
如果密钥不存在,setValue(_:forKey:) 显然会抛出异常。
从我了解到的you're not to catch Swift 中的一个 Objective-C 异常。
有没有安全的方法通过字典更新核心数据属性?
我知道我可以有如下功能:
func update(storableClass : ManagedObject.Type, id: ID, closure: (ManagedObject) -> ()) throws {}
然后这样称呼它:
update(storableClass: UserEntity.self, id: "123123", closure: { userEntity in
userEntity.name = "new name"
})
我喜欢同时拥有这两种选择...以及任何其他安全/快捷的选择...
【问题讨论】:
-
@rmaddy 如果我错了,请纠正我。我认为objective-c 是相关的,因为
NSManagedObject基于NSObject而setValue函数来自objective-c... -
每个 UI 类也是用 Objective-C 编写的。您的问题是关于 Swift 以及如何处理在 Swift 中使用未知键错误地调用
setValue。对您来说更好的问题是,您为什么要使用未知密钥调用setValue?那是编程错误。你应该尝试捕捉异常,你应该避免引起它。 -
嗯。您的意思是 这是一个编程错误 与 用户 错误或我无法控制的东西,例如服务器?
-
服务器不应返回您的 CD 中不存在的密钥
-
正确。编写不正确的代码和正确处理数据是有区别的。
标签: ios swift core-data key-value-coding