绑定按钮状态(isEnabled)与NSUserDefaults中的数组状态

时间:2011-11-30 11:05:31

标签: objective-c cocoa

我需要将按钮的状态(isEnabled)绑定到NSUserDefaults中的数组状态(空/非空)。

我可能需要一个NSValueTransformer将一个空数组映射到NO和一个至少有一个对象为YES的数组。

这不正确,但接近:

    [showEmptyFolders bind:@"enabled" toObject:[NSUserDefaults standardUserDefaults] withKeyPath:@"kPreferencesFolderArray" options:nil];

感谢

2 个答案:

答案 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