2011-10-05 78 views
11

你们能帮助我吗?我发现如何保存和检索简单对象以将其用作应用程序设置。NSUserDefaults.StandardUserDefaults - 保存和检索字典

NSUserDefaults.StandardUserDefaults.SetString("testUser","username"); 
NSUserDefaults.StandardUserDefaults.Init(); //Although it's strange that you have to call this method to actually save your stuff 

,以后你可以像检索:

var username = NSUserDefaults.StandardUserDefaults.StringForKey("username"); 

现在,如果我需要什么保存多个用户名(多达我想)? 如果我需要使用密码或passhashes保存多个用户名,该怎么办?

回答

12

下面是阵列的例子(许多字符串保持与单个键):

 NSUserDefaults.StandardUserDefaults ["array"] = NSArray.FromStrings ("a", "b", "c"); 
     foreach (string s in NSUserDefaults.StandardUserDefaults.StringArrayForKey ("array")) { 
      Console.WriteLine (s); 
     } 

而且其中一个字典(键=值)保持与单个键的例子:

 NSDictionary dict = NSDictionary.FromObjectsAndKeys (new object[] { "user1", "user2" }, new object[] { "123", "abc" }); 
     NSString key = new NSString ("dict"); 
     NSUserDefaults.StandardUserDefaults.SetValueForKey (dict, key); 
     NSDictionary d2 = NSUserDefaults.StandardUserDefaults.DictionaryForKey (key); 
     for (int i = 0; i < d2.Count; i++) { 
      Console.WriteLine ("{0} : {1}", d2.Keys [i], d2.Values [i]); 
     } 
1

我会考虑使用核心数据,如果你有很多用户你也想搜索和过滤。如果你的应用程序不那么复杂,你总是可以将字典序列化为一个字符串,并将其保存为用户默认值。 JSON(de)序列化的好库是SBJSON http://stig.github.com/json-framework/

+0

我想过序列化的东西,但我不能通过使用NSObject.FromObject()将我的对象转换成NSObject ...它返回null ... – Agzam

+0

你使用sbjson吗?如果是这样,你可以导入SBJSON.h。你的字典然后有一个新的方法jsonRepresentation,它给你的序列化的字符串。这个String然后可以保存。如果从userdefaults返回字符串,则可以在字符串上调用JSONValue,它将返回一个字典。 – huesforalice

+0

不,我试图使用NSJsonSerialization.Serialize它会引发异常。我还没有学习如何在MonoTouch项目中使用Objective-C库......现在看来我必须现在 – Agzam

1

我很难让NSUserDefaults存储字典。我最终做的是简单地获取Documents目录,并在应用程序正在终止或转到后台时将我的字典保存到文件中,然后在应用程序完成加载时从文件加载它。 NSDictionaryNSMutableDictionary有一个从文件中加载或保存的类方法 - 它使用序列化的XML,所以它很漂亮和优雅。

如果您的应用程序不需要大量数据,并且数据很简单,结构流畅,这很好。