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

标签 ios cocoa nsmutablearray nsuserdefaults

当用户通过我的 iPhone 应用程序登录时,我会在 NSUserDefaults 中创建一堆默认元素。其中之一是 NSMutableArray,我通过以下方式添加:

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

这可以完美地工作。但是,当我想从 theArray 插入或检索值时,出现了问题。以下是我的应用程序中另一个文件的摘录:

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

当代码运行时,我希望在控制台中看到“这是一个值”,但我得到的是:

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

数组怎么是空的?我使用 NSArray 尝试了同样的操作,得到了相同的结果。

最佳答案

当你将可变对象存储到 NSUserDefaults 时,它会存储它的不可变副本,因此你不能像这样直接更改它。您必须从默认值中获取可变副本,更改它,然后将其设置回来,替换默认值中的旧对象。

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

关于ios - 存储在 NSUserDefaults 中的 NSMutableArray 不会保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6985560/

相关文章:

ios - Swift xcode 两个错误 : Cannot assign value of type 'ShapeType' to type "ShapeButton.ShapeType"

objective-c - performSelectorInBackground 和 NSOperation 子类的区别

ios - 代码会在继续之前等待返回吗?

cocoa - 如何在 Cocoa 中创建并显示自定义工作表?

objective-c - 如何将事件对象添加到 NSMutableArray 并在它们被释放时删除它们?

ios - 如何将 NSMutableArray 保存到核心数据?

iphone - 如何从 uiviewcontroller 加载类中的方法

ios - 计算今天和 future 日期之间的天数和小时数

ios - iOS中可以打开的套接字连接数量有限制吗?

c# - 在 Xamarin.Mac 中将图像复制到剪贴板