Невозможно обновить NSMutableDictionary, инициализированный со значением NSUserDefauts - PullRequest
0 голосов
/ 08 февраля 2011

Я использовал NSUserDefaults для сохранения NSMutableDictionary. Но когда я получаю значение из NSUserDefaults, я не могу изменить / обновить значения NSMutableDictionary, в который я сохраняю значения.

Нужно несколько советов, как это сделать?

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Вы всегда получаете неизменяемые экземпляры NSDictionary от NSUserDefaults. Чтобы сделать их изменяемыми, вам нужно сделать что-то вроде этого:

dict = [[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"];
myMutableDict = [dict mutableCopy];
// Note that the retain count is +1, so you will need to
// release or autorelease myMutableDict later on.
0 голосов
/ 08 февраля 2011

Вы также можете сохранить в plist.

Вот как вы пишете в список:

NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * docDirectory = [paths objectAtIndex:0];
NSString * dataFilePath = [docDirectory stringByAppendingPathComponent:@"YourFile.dat"]

NSMutableDictionary * newLocalPlist = [[NSMutableDictionary alloc] init];

// add your prefs here

[newLocalPlist writeToFile:dataFilePath atomically:YES];
[newLocalPlist release];

А вот как вы читаете из списка:

NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * docDirectory = [paths objectAtIndex:0];
NSString * dataFilePath = [docDirectory stringByAppendingPathComponent:@"YourFile.dat"]
NSMutableDictionary * lastLocalPlist = [[[NSMutableDictionary alloc] initWithContentsOfFile:dataFilePath] autorelease];
...