将对象添加到NSDictionary Controller

时间:2010-05-12 03:52:09

标签: macos controller nsdictionary cocoa-bindings nstableview

我有一个绑定到NSDictionaryController的NSTableView。我已通过界面构建​​器设置了此内容字典。我的问题是,如何以控制器自动查看并在表格中显示对象的方式将对象添加到字典中。

我在NSArrayController的示例中看到,您通过控制器而不是实际数组添加新对象,以便控制器看到更改。但是,我没有看到类似的方式使用dictionarycontroller ...

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

好吧,我最终搞清楚了。我想,因为arraycontroller镜像了一个数组的使用,字典控制器会做同样的事情,但事实并非如此。这个过程有点不同......

因此,如果您有一个要添加值的词典控制器,以便它可以更新绑定到它的任何内容,您可以使用以下过程:

//Creates and returns a new key-value pair to represent an entry in the 
//content dictionary.
id newObject = [dictController newObject];
//Use NSDictionaryControllerKeyValuePair Protocol setKey 
[newObject setKey:@"Key"];
//Use NSDictionaryControllerKeyValuePair Protocol setValue
[newObject setValue:@"value"];
//Add the object to the controller
[dictController addObject:newObject];

这将有效,更新字典控制器并将值添加到内容字典。在这种情况下,您不能使用setValue:ForKey,因为这不是NSDictionaryControllerKeyValuePair协议中实现的方法。

我希望这可以帮助其他人使用这些控制器!

答案 1 :(得分:0)

jasons答案对我不起作用,因为在我的实现中遇到了一行错误[newObject setValue:@“value”],说发现多个方法的结果不匹配,我找不到任何其他方法将按预期添加新条目的方法。

经过大量的搜索和尝试,我想出了这个解决方案: 每次dictController都需要更新时更新绑定,如下所示:

[dictController bind:NSContentDictionaryBinding toObject:self withKeyPath:@"nameOfMyDictionary" options:nil];

因此,在我的代码中,我将项目添加到我的字典中,在显示包含我的字典内容的表之前,我重置了绑定。这可能是一个肮脏的解决方案,但它对我有用。

答案 2 :(得分:0)

出色!修改为Swift3:

    // Use NSDictionaryControllerKeyValuePair Protocol setKey
    let temp = myDictionaryController.newObject()
    temp.setValue(name, forKey: "key")
    temp.setValue(list, forKey: "value")
    myDictionaryController.addObject(temp)