2012-03-30 184 views
40

我有一个的NSMutableDictionary,我已经添加值到它(几个密钥对值)。现在我需要将此NSMutableDictionary保存到NSUserDefaults对象。保存的NSDictionary到NSUserDefaults的

1.)我代码如下:我不知道它是否正确,我还需要知道如何从NSUSerDefault中检索NSMutableDictionary?

2)检索的NSMutableDictionary后,我需要把它保存到一个NSDictionary中。我怎么能做到这些?

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

[dic addObject:@"sss" forKey:@"hi"]; 
[dic addObject:@"eee" forKey:@"hr"]; 

[NSUserDefaults standardDefaults] setObject:dic forKey:@"DicKey"]; 
[[NSUserDefaults standardDefaults] synchronize]; 
+5

您还需要调用'[[NSUserDefaults的standardDefaults]同步]'保存。你究竟在为什么而挣扎?你提到了你想要做的事情,但不是你遇到问题的地方。上面包含的代码(除了缺少'[')看起来没问题。 – Sam 2012-03-30 17:07:20

+0

我需要保存一些键值对并从不同的视图进行访问。所以我想使用NSUserDefaults和NSDictionary。最后,我将不得不用这些值填充表格。 – shajem 2012-03-30 17:30:57

+0

除非你添加更多的细节,否则我怀疑你会得到更多的答案。你正在设置的东西很好。当你调用'[[[NSUserDefaults standardDefaults] objectForKey:@“DicKey”]'时,你没有找到字典吗?请注意,这将是一个'NSDictionary *'类型,而不是'NSMutableDictionary *'。如果要跨视图操作数据,请考虑将数据存储在传递给两个视图的数据模型中(或根据数据的通用/可见程度,在其上提供单例访问器)。 – Sam 2012-03-30 17:44:25

回答

74

你的代码是正确的,但你必须记住的一件事是,NSUserDefaults不可变和不可变对象区分,所以当你把它找回来,它会是一成不变的:

NSDictionary *retrievedDictionary = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"DicKey"]; 

如果你想有一个可变的字典,只需要使用mutableCopy

NSMutableDictionary *mutableRetrievedDictionary = [[[NSUserDefaults standardUserDefaults] objectForKey:@"DicKey"] mutableCopy]; 
+0

记住,使用'copy'你保留对象,所以你将成为所有者,你将负责释放它。 – Saphrosit 2012-03-30 16:48:45

+22

手动管理内存就像,无论如何。 – yuji 2012-03-30 16:53:20

+2

我正在使用ARC。而且,我需要将NSMutableDictionary保存为NSUser默认值,并从NSUserDefaults中获取NSDictionary。所以我必须使用你的第一种方法,我猜? – shajem 2012-03-30 16:55:12

5
NSMutableDictionary *profileDictionary = [[NSMutableDictionary alloc] init]; 
[profileDictionary setObject:txt_Username.text forKey:@"USERNAME_KEY"]; 
[profileDictionary setObject:txt_Password forKey:@"PASSWORD_KEY"]; 
[[NSUserDefaults standardUserDefaults] setObject:profileDictionary forKey:@"PROFILE_KEY"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

这是你的预期。