2011-04-06 80 views
0

我需要在NSUserDefaults中预填充并保存数组,以便下游方法可以读取和写入存储在那里的十个值。我已经构建了这个可行的解决方案,但有没有更好的方法来做到这一点?使用零值预填充NSUserDefaults数组

任何见识都被赞赏! LQ

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
NSMutableArray *myArray = [[NSMutableArray alloc] init]; 

// Set the array with ten Zero Value placeholders 

for (NSUInteger i = 0; i < 10; ++i) {            
    [myArray addObject:[NSNumber numberWithInt:0]]; 
} 

[userDefaults setObject:myArray forKey:@"someKeyName"]; 
[myArray release]; 

后来的方法调用这个数组是这样的:

- (void)doSomethingUseful { 

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 

    NSMutableArray *someUsefulArray = [[NSMutableArray alloc] initWithArray:[userDefaults objectForKey:@"someKeyName"]]; 

    // read some values, write some values: int someInt = [someUsefulArray objectAtIndex:3]; // etc. 
    // store array values back to NSUserDefaults . . . 

    // IS THERE A WAY TO READ AND WRITE DIRECTLY TO INDEX 3 of the NSUserDefaults array instead??? 

    [someUsefulArray release] 
} 

回答

0

我在装运应用程序实际做同样的事情。当然,它不会很优雅,但却能完成这项工作。

+0

是的,它根本不感觉优雅。 – 2011-04-06 21:46:30

0

唯一的更优雅,更令人费解的,解决办法是使用数据驱动的方法:

  1. 有一个.plist文件,其中包含你认为什么是你的默认设置。
  2. 如果程序检测到用户默认为空,它将加载这个默认plist,并将其提交给NSUserDefaults。

使用此方法,您的代码不负责构建对象。但是,如果您试图完成模式升级,则需要返回代码。

+0

谢谢。该解决方案可能对下游的其他项目有好处,但在这种情况下,plist中存储的值太多,而这只是其中的一个。 – 2011-04-08 02:35:43