创建一个列出字典中所有键和值的表

时间:2016-03-25 02:59:55

标签: swift macos nsmutabledictionary cocoa-bindings

我的AppDelegate包含一个字典。我有NSDictionaryController绑定到dict。然后我将NSTableView的2列绑定到词典控制器:

  • 第1列(密钥):控制器密钥= arrangedObjects。模型关键路径= key
  • 第2列(值):控制器键= arrangedObjects。模型关键路径= value

但我的桌子是空白的。知道如何纠正这个问题吗?

我的代码:

class AppDelegate {
    dynamic var dict = NSMutableDictionary()

    func applicationDidFinishLaunching(aNotification: NSNotification) {
        dict.setValue(1, forKey: "One")
        dict.setValue(2, forKey: "Two")
    }
}

我也尝试过:

let newObject = dictController.newObject()
newObject.setKey("One")  // deprecated
newObject.setValue(1)    // deprecated
dictController.addObject(newObject)

但Xcode表示{10}中不推荐使用setKeysetValue。如何将对象添加到NSDictionaryController?我正在运行Mac OS X 10.11.4。

2 个答案:

答案 0 :(得分:0)

字典控制器没有看到dict内的变化。您可以通过先构建字典然后分配到dict来解决此问题。

func applicationDidFinishLaunching(aNotification: NSNotification) {
    var tempDict = NSMutableDictionary()
    tempDict.setValue(1, forKey: "One")
    tempDict.setValue(2, forKey: "Two")
    dict = tempDict
}

另一个解决方案是实现键值观察器合规性。

func applicationDidFinishLaunching(aNotification: NSNotification) {
    willChangeValueForKey("dict")
    dict.setValue(1, forKey: "One")
    dict.setValue(2, forKey: "Two")
    didChangeValueForKey("dict")
}

感谢@Code不同让我意识到问题所在。

答案 1 :(得分:-1)

NSDictionaryController的小秘密在于必须通过includedKeys属性指定包含的键列表。否则,arrangedObjects内没有任何内容。最简单的方法是将includedKeys绑定到您的dict.keys属性。

在Interface Builder中:

  1. 选择字典控制器,转到“绑定检查器”
  2. 对于包含的密钥属性:set Bind To = Delegate,Model Key Path = dict.keys
  3. 编程:

    dictController.bind(NSIncludedKeysBinding, toObject: self, withKeyPath: "dict.keys", options: nil)