Я не знаю, является ли то, что я вижу со всплывающей кнопкой, заполненной привязками с преобразователем значений, тем, чем оно должно быть, или нет - необычная вещь, которую я вижу (по крайней мере, в отношении того, что я видел с преобразования значений и табличных представлений) заключается в том, что параметр «значение» в методе transformValue: представляет собой весь массив, привязанный к контроллеру массива, а не отдельные строки в массиве. Когда я сделал это с табличными представлениями, преобразователь вызывается один раз для каждой отображаемой строки в таблице, а параметр «значение» — это любой объект, привязанный к этой строке и столбцу, а не весь массив, который служит массивом содержимого. для контроллера массива.
У меня есть очень простое приложение, чтобы проверить это. В делегате приложения есть следующее:
+(void)initialize {
RDTransformer *transformer = [[RDTransformer alloc] init];
[NSValueTransformer setValueTransformer:transformer forName:@"testTransformer"];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.theData = @[@{@"name":@"William", @"age":@"24"},@{@"name":@"Thomas", @"age":@"23"},@{@"name":@"Alexander", @"age":@"64"},@{@"name":@"James", @"age":@"47"}];
}
В классе RDTransformer это:
+ (Class)transformedValueClass {
return [NSString class];
}
+(BOOL)allowsReverseTransformation {
return NO;
}
-(id)transformedValue:(id)value {
NSLog(@"%@",value);
return value;
}
В IB я добавил NSPopupButton в окно и контроллер массива в список объектов. Массив содержимого контроллера привязан к App Delegate.theData, а значения содержимого всплывающей кнопки привязаны к Array Controller.arrangedObjects.name с преобразователем значений testTransformer.
Когда я запускаю программу, журнал метода transformValue: выглядит следующим образом:
2012-09-19 20:31:39.975 PopupBindingWithTransformer[793:303] (
)
2012-09-19 20:31:40.019 PopupBindingWithTransformer[793:303] (
William,
Thomas,
Alexander,
James
)
Это не похоже на опыт других людей из того, что я вижу на SO. Есть ли что-то, что я делаю неправильно либо с привязками, либо с преобразователем значений?