如何将NSDictionary对象绑定到Interface Builder中的多个文本字段?
我想将每个对象绑定到字典中的特定项。例如,第一个文本字段应绑定到Actor:
尝试将NSDictionaryController
添加到.xib文件中,然后将其Controller Content绑定到用户默认值中的字典。然后,您可以将文本字段值绑定到Dictionary Controller(arrangeObjects键)。
我从未尝试过,但我认为它必须有效。
希望能帮助到你。
您需要在Interface Builder中添加NSObjectController。在属性检查器选项卡中,将标准模式“类”和类名保留在“NSMutableDictionary”上,但切换“准备内容”。在绑定检查器中,将“内容对象”绑定到“共享用户默认值控制器”,将控制器键“值”和“模型键路径”绑定到用户默认值中的字典键。切换“将内容处理为复合值”。
现在您可以绑定文本字段(或复选框等)。对象控制器的值,控制器键“选择”(!)和字典中的键(作为模型键路径)。
希望这可以帮助。我在Apple的文档中找不到答案,也没有在网上找到答案,幸运的是通过尝试不同的控制器对象来找到答案...
第一:@ keeluu的答案应该标记正确。
如果你是在代码中而不是通过IB执行此操作,那么需要注意“陷阱”。它看起来像这样:
// Assume 'anObjectController' is an NSObjectController. // Assume 'userDefaultsController' is [NSUserDefaultsController sharedUserDefaultsController] // Assume 'someDictionary' is an NSDictionary in userDefaults. [self.anObjectController bind:NSContentBinding toObject:userDefaultsController withKeyPath:@"values.someDictionary" options:@{NSHandlesContentAsCompoundValueBindingOption: @YES}];
如果您执行上述操作,您会发现当您将UI元素绑定到someDictionary
中的属性时,这些UI元素将正确显示IN用户默认值,但是当您更改它们时(例如,单击绑定复选框)这些值不会在用户默认值中更新;旧的价值观坚持不懈。
绑定必须是NSContentObjectBinding
而不是NSContentBinding
。 NSObjectController类公开名为contentObject
的绑定。绑定到那个,一切正常。
这是一个容易犯的错误,因为Xcode的代码完成自动进入NSContentBinding
,无论如何它是最常用的绑定名称之一。这只花了我几个小时的麻烦,所以希望我能节省一些时间。