为了记录我的解决方案:
最终,我通过不使用枚举来解决了这个问题。
问题在于,组合框希望绑定到对象数组(即 NSObject 的实例),但枚举被定义为常量整数(即原始数据类型)。
我相信可以提供一些基础设施来将枚举值转换为对象,然后再转回来。(显然,这就是 NSValueTransformer 类所做的事情,而且很容易子类化和设计一个...但是我却找不到任何将我的 NSValueTransformer 子类或其实例绑定到组合框的方法。关于这个必要步骤的文档根本不存在。这真的很疯狂——我找到的每个示例都只是讲述如何对其进行子类化,而不是如何将其绑定。而我尝试的所有方法都会抛出异常。)
最终,我意识到所有这些辛苦的工作和转换都可以通过将枚举值变成类的实例来避免。
因此,对于枚举,您必须完成所有这些操作:
typedef { a, b, c } EnumType;
@interface SomeClass {
@property EnumType enumValue;
}...
NSMutableArray *enumTypeNames = { @"a", @"b", @"c" };
...然后将组合框绑定到enumTypeNames,并执行一些技巧,将枚举值转换为enumTypeNames的索引,反之亦然。
或者,您可以只需执行以下操作:
@interface EnumClass {
@property NSString *name;
} ...
@interface SomeClass {
@property (weak) EnumClass *enumValue;
} ...
NSMutableArray *enumValues = [NSMutableArray new];
[enumValues addObject: [EnumClass initWithName: @"a"]];
[enumValues addObject: [EnumClass initWithName: @"b"]];
[enumValues addObject: [EnumClass initWithName: @"c"]];
...并将组合框直接绑定到数组(名称指定为模型键路径)。更清晰的解决方案。