我可以使用NSDictionaryController作为词典字典吗?

时间:2011-09-27 03:47:49

标签: objective-c cocoa nsdictionary cocoa-bindings

我有一个plist文件,其中包含我需要在组织为词典字典的应用程序中显示的信息。我刚刚开始编程Cocoa,所以我不确定最好的方法。显然我可以手动完成所有操作,并编写循环并将数据添加到UI元素,但在我看来,绑定和提供的控制器应该让我更容易做到这一点。

我特别想知道是否有直接方式(例如主要使用Interface Builder)来链接我从阅读plist文件获得的NSDictionary,其本身包含更多NSDictionary个元素,包含名称 - 值字符串对,到适当的用户界面元素 - 可能是大纲视图或浏览器。

或者,数据将适合功能浏览器类型面板(如在Excel中),其中顶级键是功能类别,下一级是该类别中的功能,我可以填充最低级别的文本区域级别详细信息 - 即最终字典中的值数据。

1 个答案:

答案 0 :(得分:0)

我认为您无法使用NSBrowser或NSOutlineView执行此操作。我之所以这样说,是因为如果你使用这些视图的绑定,你需要使用NSTreeController。 NSTreeController提供了指定模型中哪些键指示当前对象是否具有子对象(isLeaf)以及如何访问子对象(子对象)的功能。

因此,如果您要使用这两个视图中的一个,则必须能够为模型添加其他键和属性才能执行此操作。很多时候,当我使用NSOutlineView和NSBrowser时,我发现最简单地跳过绑定并只使用all delegate&数据源方法。它们需要更多的代码,但它们并不难拼凑起来,如果我的数据模型很复杂,或者数据的格式不是通过NSTreeController轻松抽取,有时我更喜欢它们。

但是,您可以通过执行以下操作来使用NSTableView。

  1. 在NIB中创建NSDictionaryController。
  2. 在读取plist的控制器中,为NSDictionaryController创建一个插座,并使用Interface Builder连接插座。
  3. 在读取plist的代码中,添加一行代码,将NSDictionaryController的内容设置为plist中的根词典。
  4. 在您的NIB中,创建一个NSArrayController。将数组控制器的“Content Array”绑定绑定到NSDictionaryController。对于“Controller Key”绑定属性,请指定“arrangeObjects”。
  5. 现在拿一个NSTableView并将它放在你的NIB中。将每个NSTableColumn的“Value”绑定绑定到NSArrayController,并将“Controller Key”绑定属性绑定,从字典中指定要在表列中显示其值的键。