如何绑定到Cocoa中NSDictionary子字典的值?
我有一个具有两个属性的类:NSString*文件名和NSDictionary*框架,如下所示如何绑定到Cocoa中NSDictionary子字典的值?,cocoa,nsdictionary,cocoa-bindings,Cocoa,Nsdictionary,Cocoa Bindings,我有一个具有两个属性的类:NSString*文件名和NSDictionary*框架,如下所示 NSDictionary*帧 关键字:NSString 值:字段字典的实例 NSDictionary*字段 键:NSNumber(C++枚举值) 值:NSValue(C++对象指针) 我想创建一个主详细视图,其中NSTableView列出每个文件。第一列中的fileName,很容易绑定,但我不知道如何将任何列或详细视图中的字段绑定到字段子字典中的值 我想我无论如何也不能绑定到C++对象方法。
- NSDictionary*帧
- 关键字:NSString
- 值:字段字典的实例
- NSDictionary*字段
- 键:NSNumber(C++枚举值)
- 值:NSValue(C++对象指针)
无论如何,我的挑战是找出嵌套字典的绑定。子类化NSController和friends可能不是最好的方法 没有办法解决这个问题:键/值编码,所有绑定所基于的API依赖的键/键路径是NSString,而不是NSNumber(或任何其他类型)。如果您从使用NSNumber键切换到使用NSString键,您可能会发现这要容易得多。实现这一点非常简单,只需使用switch语句实现两个函数,在字符串和枚举值之间来回转换
你已经意识到,绑定一个C++对象的指针是没有希望的,所以下面的讨论假设你已经将值烘焙到字典中。如果出于某种原因,您无法在字段字典中切换到使用NSString键,您还可以将NS[Mutable]字典子类化,并覆盖
-valueforundinedkey:
和-setValue:forundinedkey:
以执行此转换。子类化NS[Mutable]字典不适合胆小的人,因为这些类由类集群支持。文档清楚地列举了子类的所有需求,所以我在这里不做介绍。此外,您需要在-setObject:forKey:
实现中,确保发送-willChangeValueForKey:
和-didChangeValueForKey:
与使用NSNumber键进行的修改相对应的字符串键通知
假设您最终希望将所有这些存储在
同样,在主详细视图的详细信息部分中,我可以将文本字段单元格绑定到NSArrayController,将“selection”作为控制器键,将“frames.key1.key2”作为模型键路径。在发布问题后,我算出了NSString与NSNumber的区别。最后,我按照我的最后一个建议——将每个字段的数据作为值存储在子字典中。我认为现在只需要弄清楚要使用哪些控制器对象,如何将它们链接到视图,以及如何使用正确的键配置视图,等等。