gpt4 book ai didi

objective-c - 将两个不同的模型键路径绑定(bind)到相同的 NSArrayController 选择

转载 作者:行者123 更新时间:2023-12-03 17:18:20 25 4
gpt4 key购买 nike

假设我有以下字典数组:

{
{
isoName => en,
fullName => English,
localName => English
},
{
isoName => de,
fullName => German,
localName => Deutsch
},
{
isoName => fr,
fullName => French,
localName => français
}
}

如何将 fullName 值绑定(bind)到 NSPopUpButton 控件的值,但将所选内容的 isoName 绑定(bind)到 NSUserDefaults?我有一个 NSArrayController 设置了一个像上面这样的数组,我的 NSPopUpButton 绑定(bind)到这个 Controller ,模型键路径为“fullName”,但我想将 isoName 保留在 NSUserDefaults 中。这可能吗?有没有更好的方法来解决这个问题?

最佳答案

首先,创建一个表示语言的模型对象类,并将这些字典对设置为模型对象的属性。根据我的经验,字典不能很好地与绑定(bind)配合使用;绑定(bind)系统需要真实的模型对象。

接下来,创建一个 Controller 对象来保存这些模型对象。我将其称为 LanguageKeeper。它具有三个属性:

  • 语言(语言对象的 NSArray)
  • 所选语言
  • selectedLanguageISOName

将最后一个公开为绑定(bind)。另外,使最后两个属性之一衍生于另一个属性。我将创建 ISOName 属性派生:getter 将返回 self.selectedLanguage.ISOName,setter 将查找给定的 ISO 名称并设置 self.selectedLanguage > 到该语言对象。确保实现 keyPathsForValuesAffectingSelectedLanguagekeyPathsForValuesAffectingSelectedLanguageISOName,并在每个方法返回的集合中包含其他属性的名称。

首先,将 NSArrayController 的内容数组绑定(bind)到 LanguageKeeper 的 languages 属性。

然后,在弹出按钮上绑定(bind)三个属性:

  • 将内容添加到 NSArrayController 的 arrangedObjects 属性中,将模型键路径留空(如果这会导致问题,则将其设置为 self)
  • 将内容值设置为同一 arrangedObjects 属性,模型键路径为“fullName
  • 将所选对象添加到 LanguageKeeper 的 selectedLanguage 属性

最后,将 LanguageKeeper 上的 selectedLanguageISOName 绑定(bind)到用户默认 Controller 的相应属性。 (您无法将弹出按钮直接绑定(bind)到 UDC,因为弹出按钮需要您的模型对象之一。)

您还可以尝试将弹出按钮的内容绑定(bind)到数组中字典的 isoName 和内容值绑定(bind)到 fullName,但是我非常不信任使用原始对象作为模型对象。我过去遇到过太多的问题。此外,从长远来看,使用模型对象是有返回的,而且使用它们非常有趣。

完成以上所有内容后,会发生以下情况:

用户更改弹出按钮中的值
  1. 弹出按钮会更改其选定对象属性的值。
  2. 这会更改 LanguageKeeper 的 selectedLanguage 属性。
  3. 这会更改 LanguageKeeper 的其他属性 (selectedLanguageISOName)。
  4. 这会通过 UDC 更改用户默认值。
其他一些对象会更改用户默认值
  1. UDC 发布有关值已更改的通知。
  2. 这会更改 LanguageKeeper 的 selectedLanguageISOName 属性。
  3. 这会更改 LanguageKeeper 的其他属性 (selectedLanguage)。
  4. 这会更改弹出按钮的 selected-object 属性的值。
  5. 用户会在弹出菜单中看到新选择的fullName

如果您不明白此答案的任何部分,请要求澄清。

关于objective-c - 将两个不同的模型键路径绑定(bind)到相同的 NSArrayController 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/575904/

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