我有一个ViewController
使用“Note”对象作为实例变量。该变量在 ViewController
之前设置出现。
Note
对象包含 customFields
NSMutableDictionary<String, String>
。
我将字典的每个值绑定(bind)到 NSTextField
字典中 viewWillAppear
:
newTextField.bind(.value, to: self, withKeyPath: "note.customFields.\(key)", options: nil)
文本字段正确显示 note.customFields.\(key)
中的值。
但是,如果用户编辑该值并保存,则更改不会反射(reflect)在字典中。
save()
(基本上是一个 ManagedObjectContext.save())方法已通过其他字段(绑定(bind)到其他非字典实例变量)进行了测试并且可以正常工作。
字典没有收到更新值是否有原因?
感谢您的帮助:-)
编辑:这是模型中 customFields 的定义:
最佳答案
这里的问题是可变类型(此处 NSMutableDictionary
)和核心数据的组合。
这篇文章有帮助:Core Data not saving transformable NSMutableDictionary
解决方案摘要
正如上面提到的第一个链接中所建议的,我尝试通知 Core Data 我的 NSMutableDictionary
中的更改使用note.valueDidChange(forKey: "customFields")
但它无法正常工作。
所以我最终使用了第一个链接中的第二个命题,这与第二个链接中提出的解决方案相同:
- 使用
NSDictionary
作为可变形类型 - 当您需要修改此词典时,请使用
mutableDict = dictionary.mutableCopy()
,然后保存回nsdictionary:dictionary = mutableDict.copy()
- 针对
NSTextField
的具体情况绑定(bind),绑定(bind)将用于显示值,但要更新值,您必须在没有绑定(bind)的情况下执行此操作(每当您的 View 消失或文本字段结束编辑时)
希望有帮助!
关于swift - Cocoa 绑定(bind)仅以一种方式工作(NSMutableDictionary),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58954332/