开发者

Pre-populating a NSUserDefaults array with Zero Value values

I need to pre-populate and save an array in NSUserDefaults so that downstream methods can read and write to ten values stored there. I've constructed this workable solution, but is there a better way of doing this?

Any insight is appreciated! lq

NSUserDe开发者_如何学JAVAfaults *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];

Later methods call this array like this:

- (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]
}


I've actually done the same thing in a shipping application. Sure, it doesn't feel elegant, but it does the job.


The only more elegant, and more convoluted, solution would be to use a data-driven approach:

  1. Have a .plist file containing what you consider to be your default settings.
  2. If the program detects that the user defaults is empty, it will load this default plist, and commit it to NSUserDefaults.

Using this method your code is not responsible for building the objects. However, if you are trying to accomplish a schema-upgrade, you're going to need to go back to the code.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜