我需要将按钮的状态(isEnabled)绑定到NSUserDefaults中的数组状态(空/非空)。
我可能需要一个NSValueTransformer将一个空数组映射到NO和一个至少有一个对象为YES的数组。
这不正确,但接近:
[showEmptyFolders bind:@"enabled" toObject:[NSUserDefaults standardUserDefaults] withKeyPath:@"kPreferencesFolderArray" options:nil];
感谢
答案 0 :(得分:7)
将数组与数组控制器链接,并将按钮的Enabled
绑定绑定到arrangedObjects.@count
keypath。零计数用作布尔值NO
,任何非零值都被视为YES
。 (它也可以在没有阵列控制器的情况下工作,我只是没试过它。)
顺便说一下,如果需要,可以添加NSNegateBoolean标准变换器。
答案 1 :(得分:3)
您可以创建一个采用数组的值转换器,并返回YES或NO,无论它是否具有非零元素数。像这样:
@interface PositiveCountTransformer : NSValueTransformer
@end
@implementation PositiveCountTransformer
+ (Class)transformedValueClass
{
return [NSNumber class];
}
+ (BOOL)allowsReverseTransformation
{
return NO;
}
- (id)transformedValue:(id)value
{
NSInteger result;
if ( [value isKindOfClass:[NSArray class]] )
result = [value count];
else
result = 0; // Or however you want to handle it
return [NSNumber numberWithBool:(result > 0)];
}
@end