記錄我的後代選擇的解決方案:
最後,我通過...不使用枚舉解決了這個問題。
問題當然是組合框希望綁定到一個對象數組(即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"]];
...和組合框直接綁定到陣列(指定爲模型的關鍵路徑名)。更清潔的解決方案。
謝謝。我認爲這兩種解決方案都可以通過一些調整工作。 – 2012-08-17 15:44:06