2011-04-06 119 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