2014-08-28 66 views
1

我打算優化我的代碼並改進我的編程。我正在看這個不斷更新的聲明。有沒有更好的方式來寫這個調用到許多NSUserDefault BOOLS?

有沒有更好的方法來調用衆多的BOOLS?是否可以將它們包含在FOR聲明中?

baseballHat = [[NSUserDefaults standardUserDefaults] boolForKey: 
@"baseballHat"]; 

asianHat = [[NSUserDefaults standardUserDefaults] boolForKey: @"asianHat"]; 

    cowboyHat = [[NSUserDefaults standardUserDefaults] boolForKey: @"cowboyHat"]; 

    topHat = [[NSUserDefaults standardUserDefaults] boolForKey: @"topHat"]; 

    partyHat = [[NSUserDefaults standardUserDefaults] boolForKey: @"partyHat"]; 

    sumbreroHat = [[NSUserDefaults standardUserDefaults] boolForKey: @"sumbreroHat"]; 

    wizardHat = [[NSUserDefaults standardUserDefaults] boolForKey: @"wizardHat"]; 

    beretHat = [[NSUserDefaults standardUserDefaults] boolForKey: @"beretHat"]; 

    pirateHat = [[NSUserDefaults standardUserDefaults] boolForKey: @"pirateHat"]; 

    vikingHelmet = [[NSUserDefaults standardUserDefaults] boolForKey: @"vikingHelmet"]; 


    if(baseballHat == YES){ 

     _baseballWearBut.visible = YES; 
     _baseballHatOwned.visible = YES; 

    } 
     if(topHat == YES){ 

     //Continue with if statements 

回答

0
// *** Following is few snippets *** 

// *** Create a Dictionary with various states *** 
NSMutableDictionary *dictStates = [[NSMutableDictionary alloc] init]; 
[dictStates setObject:[NSNumber numberWithBool:YES] forKey:@"asianHat"]; 
[dictStates setObject:[NSNumber numberWithBool:NO] forKey:@"cowboyHat"]; 
[dictStates setObject:[NSNumber numberWithBool:NO] forKey:@"topHat"]; 

// *** Save them to UserDefaults *** 
[[NSUserDefaults standardUserDefaults] setObject:dictStates forKey:@"MyStates"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

// *** Again Access all the various states stored in UserDefaults *** 
NSMutableDictionary *dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"MyStates"]; 

// *** Iterate through all the Objects *** 
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    NSLog(@"%@ is %@",key , obj); 
}]; 

// *** Modify Existing value and store again to UserDefaults *** 
// *** Create Mutable Copy of Dictionary *** 
NSMutableDictionary *dictModified = [[[NSUserDefaults standardUserDefaults] objectForKey:@"MyStates"] mutableCopy]; 
// *** modify value *** 
[dictModified setObject:[NSNumber numberWithBool:YES] forKey:@"topHat"]; 
// *** Save them to UserDefaults *** 
[[NSUserDefaults standardUserDefaults] setObject:dictModified forKey:@"MyStates"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 
1

這應該做的伎倆:

NSArray *array = @[@"baseball", @"asian", @"cowboy", @"top"]; //and the other ones 
for (NSString *prefixKey in array) 
{ 
    NSString *key = [NSString stringWithFormat:@"%@Hat", prefixKey]; 
    BOOL boolValue = [[NSUserDefaults standardUserDefaults] boolForKey:key]; 
    [self setValue:@(boolValue) forKey:key]; 
} 

我不建議這樣做,我不喜歡 「他們的名字」(使用valueForKey:)調用變量。

另一種方法可以是使用NSDictionaryNSArray,但後來,你需要封裝你BOOL爲目標(NSNumber爲例),並可以添加另一個級別。
您可能需要重新考慮您的架構應用程序。
Hat只是一個BOOL?它有更多的信息嗎?難道它只是一個變種到一個不同的對象(例如,創建一個類與變種hat)?
你可以有各種這樣的hatvalues到TRUE?如果沒有,也許使用enumdef可能是一個好的解決方案。

相關問題