可可绑定仅以一种方式起作用(NSMutableDictionary)

时间:2019-11-20 12:25:12

标签: swift macos nsmutabledictionary cocoa-bindings

我有一个ViewController,带有一个“ Note”对象作为实例变量。在ViewController出现之前设置此变量。

Note对象包含一个customFields NSMutableDictionary<String, String>。 我将字典的每个值绑定到NSTextField中字典的viewWillAppear

newTextField.bind(.value, to: self, withKeyPath: "note.customFields.\(key)", options: nil)

textField正确显示了note.customFields.\(key)中的值。 但是,如果用户编辑该值并保存,则更改不会反映在字典中。 save()(基本上是managedobjectcontext.save())方法已经在其他字段(绑定到其他非字典实例变量)上进行了测试,并且可以正常工作。

词典为什么没有收到更新后的值?

感谢您的帮助:-)

编辑:这是模型中customField的定义:

enter image description here

1 个答案:

答案 0 :(得分:0)

这里的问题是可变类型(此处为NSMutableDictionary)和核心数据的组合。

这篇文章帮助了:Core Data not saving transformable NSMutableDictionary

这篇文章也有帮助:https://medium.com/@rohanbhale/hazards-of-using-mutable-types-as-transformable-attributes-in-core-data-2c95cdc27088

解决方案摘要

正如上面提到的第一个链接中所建议的那样,我尝试使用NSMutableDictionary通知note.valueDidChange(forKey: "customFields")我的NSDictionary中的更改,但是没有正常工作

所以我最终在第一个链接中使用了第二个命题,这与第二个链接中提出的解决方案相同:

  • 使用mutableDict = dictionary.mutableCopy()作为可转换类型
  • 当您需要修改此词典时,请使用dictionary = mutableDict.copy(),然后保存回到nsdictionary:NSTextField
  • 对于useShinyjs()绑定的特定情况,绑定将可用于显示值,但是对于更新值,您必须在没有绑定的情况下进行操作(无论何时视图消失或文本字段结束编辑时)< / li>

希望有帮助!