简体   繁体   English

存储在NSUserDefaults中的NSMutableArray不会保存数据

[英]NSMutableArray stored in NSUserDefaults won't save data

When a user signs in through my iPhone app, I create a bunch of default elements in the NSUserDefaults. 当用户通过我的iPhone应用程序登录时,我在NSUserDefaults中创建了一堆默认元素。 One of these is an NSMutableArray that I add the following way: 其中之一是NSMutableArray,我通过以下方式添加它:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *theArray = [NSMutableArray array];
[prefs setObject:theArray forKey:@"theArray"];

This works flawlessly. 这可以完美地工作。 However, when I want to insert or retrieve values from theArray , something goes wrong. 但是,当我想从theArray插入或检索值时,出现了问题。 Here's an excerpt from another file in my app: 这是我应用程序中另一个文件的摘录:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[[prefs objectForKey:@"theArray"] setValue:@"This is a value" forKey:@"aValue"];
NSLog(@"%@", [[prefs objectForKey:@"theArray"] valueForKey:@"aValue"]);

I would expect to see "This is a value" in the console when the code has run, but instead I get this: 当代码运行时,我希望在控制台中看到“这是一个值”,但我得到了:

2011-08-08 18:35:17.503 MyApp[7993:10d03] (
)

How come the array is empty? 数组为什么是空的? I've tried the same thing using an NSArray with the same result. 我已经尝试使用具有相同结果的NSArray进行相同的操作。

When you store mutable objects to NSUserDefaults, it stores an immutable copy of it so you can't change it directly like that. 当您将可变对象存储到NSUserDefaults时,它存储了它的不可变副本,因此您不能像这样直接更改它。 You have to get the mutable copy out of defaults, change it, and then set it back, replacing old object in defaults. 您必须从默认设置中删除可变的副本,将其更改,然后重新设置,以默认设置替换旧对象。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *mutableArrayCopy = [[prefs objectForKey:@"theArray"] mutableCopy];
[mutableArrayCopy addObject:@"some new value"];
[prefs setObject:mutableArrayCopy forKey:@"theArray"];
[mutableArrayCopy release];

NSArray *savedArray = [NSArray arrayWithObjects:@"obj1",@"obj2",@"obj3", nil]; NSArray * savedArray = [NSArray arrayWithObjects:@“ obj1”,@“ obj2”,@“ obj3”,nil];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:savedArray forKey:@"key_for_savedArray"]; [userDefaults setObject:savedArray forKey:@“ key_for_savedArray”];
[userDefaults synchronize]; [userDefaults同步];

//To retrive array use: //要检索数组,请使用:

NSArray *retrivedArray = [userDefaults objectForKey:@"key_for_savedArray"]; NSArray * retrivedArray = [userDefaults objectForKey:@“ key_for_savedArray”];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM