2014-08-28 29 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可能是一个好的解决方案。

相关问题