gpt4 book ai didi

cocoa - 如何绑定(bind)到 Cocoa 中 NSDictionary 子词典的值?

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

我有一个具有两个属性的类:NSString *fileName 和 NSDictionary *frames,如下所示。

  • NSDictionary *框架
    • 键:NSString
    • value:字段字典的实例
  • NSDictionary *字段
    • 键:NSNumber(C++ 枚举值)
    • 值:NSValue(C++ 对象指针)

我想创建一个主从 View ,其中包含列出每个文件的 NSTableView。第一列中的 fileName 很容易绑定(bind),但我不知道如何将任何列或详细 View 中的字段绑定(bind)到字段子字典中的值。

我想无论如何我都无法绑定(bind)到 C++ 对象方法。我想我需要一个自定义 Controller 来存储字段子字典中的值。是否可以让自定义 Controller 遵守 KVC,以便我可以通过枚举键访问字段值,调用适合我正在使用的每个 C++ 库的枚举定义的类型的方法?

或者,我应该将每个字段的数据存储为字段字典中的值吗?修改 GUI 中的值后,我必须运行一个方法来处理字典,此时我可以重建 C++ 字段对象并调用适当的方法。

无论如何,我的挑战是找出嵌套字典的绑定(bind)。

最佳答案

子类化 NSController 和 friend 可能不是最好的方法。

没有办法解决这个问题:键/值编码,所有绑定(bind)所基于的 API 依赖于 NSString 的键/keyPath,而不是 NSNumber(或任何其他类型)。如果您从使用 NSNumber 键改为使用 NSString 键,您可能会发现这要容易得多。实现这一目标就像使用 switch 语句实现两个函数一样简单,这两个函数在字符串和枚举值之间来回转换。

您已经意识到不可能绑定(bind)指向 C++ 对象的指针,因此以下讨论假设您已将值烘焙到字典中。如果由于某种原因,您无法切换到在字段字典中使用 NSString 键,您也可以继承 NS[Mutable]Dictionary 并覆盖 -valueForUndefinedKey:-setValue:forUndefinedKey:来执行此翻译。 NS[Mutable]Dictionary 的子类化不适合胆小的人,因为这些类是由类簇支持的。该文档清楚地列举了子类化器的所有要求,因此我不会在这里介绍。此外,您需要在 -setObject:forKey: 中执行时,请务必发送-willChangeValueForKey:-didChangeValueForKey:与使用 NSNumber 键进行的修改相对应的字符串键的通知。

假设您最终希望将所有这些存储在 std::hash_map<enum, ptr> 中或其他一些 C++ 类/结构,桥接到 Objective-C 的逻辑方法是创建一个新的模型类,该模型类包装 STL hash_map 并使用 NSString 键提供 KVC/KVO 语义,处理与上述类似的转换。

关于cocoa - 如何绑定(bind)到 Cocoa 中 NSDictionary 子词典的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13294964/

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