记录我为后代选择的解决方案:
最后,我通过......不使用枚举解决了这个问题。
当然,问题在于组合框希望绑定到对象数组(即 NSObject 的实例),但枚举被定义为常量整数(它们是原语)。
我确信可以提供一些基础设施来将枚举值转换为对象,然后再转换回来。(从表面上看,这就是 NSValueTransformer 类所做的事情,并且很容易继承和设计一个......但是对于我的生活,我找不到任何将我的 NSValueTransformer 子类或其实例实际绑定到组合的方法盒子。那个基本步骤的文档不存在。这太疯狂了——我发现的每个例子都只是谈论如何子类化它,而不是如何绑定它。我尝试的一切都抛出了异常。)
最后,我意识到,只需将枚举值变成类的实例,就可以避免所有这些艰苦的工作和翻译。
因此,对于枚举,您必须执行所有这些操作:
typedef { a, b, c } EnumType;
@interface SomeClass {
@property EnumType enumValue;
}...
// somewhere else, something like this:
NSMutableArray *enumTypeNames = { @"a", @"b", @"c" };
...然后将组合框绑定到 enumTypeNames,并执行一些技巧将枚举值转换为 enumTypeNames 索引,反之亦然。
或者,您可以这样做:
@interface EnumClass {
@property NSString *name;
} ...
@interface SomeClass {
@property (weak) EnumClass *enumValue;
} ...
// somewhere else:
NSMutableArray *enumValues = [NSMutableArray new];
[enumValues addObject: [EnumClass initWithName: @"a"]];
[enumValues addObject: [EnumClass initWithName: @"b"]];
[enumValues addObject: [EnumClass initWithName: @"c"]];
...并将组合框直接绑定到数组(名称指定为模型键路径)。更清洁的解决方案。