2011-11-30 83 views
1

我需要在NSUserDefaults中將按鈕的狀態(isEnabled)綁定到數組的狀態(空/非空)。NSUserDefaults中的綁定按鈕狀態(isEnabled)與陣列狀態

我可能需要一個NSValueTransformer將一個空數組映射到NO和一個至少有一個對象爲YES的數組。

這是不正確的,但臨近:

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

感謝

回答

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 
6

鏈路與陣列控制器和綁定按鈕的Enabled結合[email protected]的keyPath陣列。零計數作爲布爾值NO工作,任何非零值都被視爲YES。 (它可能沒有陣列控制器,我只是沒有嘗試它)。

順便說一下,如果你需要相反的方式,你可以添加NSNegateBoolean標準轉換器。