写入 NSUserDefault 和 .plist 失败

Posted

技术标签:

【中文标题】写入 NSUserDefault 和 .plist 失败【英文标题】:Writing in NSUserDefault and .plist failed 【发布时间】:2012-08-05 22:24:15 【问题描述】:

我无法在 .plist 和 NSUser 默认文件中获取一些信息。 对于我已经发布的 .plist,但似乎没有任何问题:

How to update an array set into the .plist dictionary

对于 NSUser Default,我正在做这样的事情:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *userSettings = [[NSMutableArray alloc]initWithArray:[[defaults objectForKey:@"userSettings"]mutableCopy]];

[userSettings addObject:userSettingsArray];//adding an array into my userSettingsArray (declared higher in the code)
[defaults setValue:userSettings forKey:@"userSettings"];
[defaults synchronize];

我在徘徊,Xcode 中是否有任何选项允许或不允许用户写入应用程序文件夹?

我有点卡在这里

感谢您的帮助,

提姆

【问题讨论】:

究竟是什么不工作?到目前为止似乎是正确的...... 是什么让您断定您的设置没有被存储?代码看起来相当混乱; mutableCopy 完全是多余的,您正在构建一个数组数组? @Mario:数组没有被复制,当我想检索存储的信息时,数组是空的。 @Tommy,我需要存储多个用户信息(数组数组) 【参考方案1】:

使用

[defaults setObject:userSettings forKey:@"userSettings"];

而不是

[defaults setValue:userSettings forKey:@"userSettings"];

【讨论】:

不,我无法在 UserDefaults 中写入数组。这是我从 NSUserDefault 中获取数组的代码: NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *userSettings = [[NSArray alloc]initWithArray:[defaults objectForKey:@"userSettings"]]; _tempUserArray = [[NSArray alloc]initWithArray:userSettings]; 尝试将 NSArray 添加到用户默认值而不是 NSMutableArray。如果这也不起作用,您始终可以将数组转换为 NSData,然后将其保存为用户默认值。如果这样做,您将始终必须在使用数据之前对其进行编码/解码。您可以在 Apple 文档中找到这是如何完成的。【参考方案2】:

我找到了解决问题的方法: 我像这样从 IBOutlet 输入数据

[self.tempUserSettings insertObject:self.firstName atIndex:1];

而不是这个:

[self.tempUserSettings insertObject:self.firstName.text atIndex:1];

所以数据是错误的,等等……

感谢你的帮助,从那些 .plist 和 NSUserDefault 中学到了很多

【讨论】:

以上是关于写入 NSUserDefault 和 .plist 失败的主要内容,如果未能解决你的问题,请参考以下文章

为啥不建议使用NSUserDefault存储大量数据

iOS 4.2 中的 NSUserDefault 问题

如何为 NSUserDefault Keys 设置初始值?

谈谈大家熟悉的NSUserDefault

使用NSUserDefault存储大量数据有啥缺点

读取和写入 NSMutableDictionary 到 plist 文件