Предварительное заполнение массива NSUserDefaults значениями Zero Value - PullRequest
0 голосов
/ 07 апреля 2011

Мне нужно предварительно заполнить и сохранить массив в 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]
}

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

Единственным более элегантным и более замысловатым решением было бы использование подхода, управляемого данными:

  1. У вас есть .plist файл, содержащий то, что вы считаете настройками по умолчанию.
  2. Если программа обнаружит, что пользовательские значения по умолчанию пустые, она загрузит этот plist по умолчанию и передаст его в NSUserDefaults.

Используя этот метод, ваш код не несет ответственности за построение объектов. Однако, если вы пытаетесь выполнить обновление схемы, вам нужно будет вернуться к коду.

0 голосов
/ 07 апреля 2011

Я действительно сделал то же самое в приложении для доставки. Конечно, это не выглядит элегантно, но это делает работу.

...