gpt4 book ai didi

objective-c - 绑定(bind)到包含字典数组的 NSUserDefaults

转载 作者:行者123 更新时间:2023-12-03 17:24:46 26 4
gpt4 key购买 nike

我有一个 NSUserDefaults 项目,它是一个字典数组。该数组中的每个字典都对应一个对象,该对象定义了我关心的 NSMenuItem 属性。每个字典中的键/值属性之一是一个 bool 值,用于定义是否应显示或隐藏菜单项。该值的关键是“show”。这是一个直观的示例:

MenuItems      (Array)
Item 0 (Dictionary)
label (String) "Menu Item 1"
show (Boolean) YES
Item 1 (Dictionary)
label (String) "Menu Item 2"
show (Boolean) NO

在这种情况下,将显示第一个菜单项,但不会显示第二个菜单项。我希望它能够随着用户默认值的更改而动态更新(通过首选项 Pane )。

理想情况下,我想将 NSMenuItem 上的“隐藏”属性直接绑定(bind)到相应的“显示”值。不幸的是,根据NSMenuItem Bindings ,隐藏不是可以绑定(bind)的东西。但无论如何我都尝试过,并且不确定我所做的是否有效。困难在于这是一个字典数组,我不清楚绑定(bind)在这里如何工作。我有一个绑定(bind)到sharedUserDefaults MenuItems的NSArrayController,调试时可以通过arrangedObjects看到各种数据。

我尝试了很多事情:

  • 直接绑定(bind)到字典值
  • 为每个字典创建一个包装 NSObjectController 并绑定(bind)到键路径“content.show”
  • 通过 addObserver:forKeyPath:options:context 观察字典本身
  • 如上所述观察包装的 NSObjectController。

这些都不会导致任何事情发生。然而,直接观察 NSArrayController 的arrangedObjects 确实会触发observeValueForKeyPath:...但这实际上与直接使用 NSUserDefaultsDidChangeNotification 没有太大区别。

有没有办法通过绑定(bind)或 KVO 来解决这个问题,让我了解我正在寻找的详细程度?

最佳答案

MenuItem隐藏属性可以绑定(bind),它在IB的选择列表中。但是,您无法绑定(bind)到数组中的对象,现在可以说实际上是 array.object1。我认为如果你让你的用户默认字典字典,你可以做你想做的事 - 顶层的键可以是“menuItem1”,“menuItem2”等,其值是包含你需要的所有其他键的字典。如果不知道用户默认设置中还有什么,很难判断这是否有效。如果它可以工作,你可以使用 valueForKeyPath: like dict.menuItem1.show 获取你想要的信息

关于objective-c - 绑定(bind)到包含字典数组的 NSUserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884012/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com