问题 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");

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


12807
2017-10-05 15:14


起源



答案:


这是一个数组的例子(许多字符串用一个键保存):

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

以及使用单个键保存字典(key = value)的示例:

        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]);
        }

12
2017-10-05 20:56





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


1
2017-10-05 16:29



我想过序列化的东西,但我不能通过使用NSObject.FromObject()将我的对象变成NSObject ...它返回null ... - iLemming
你在用sbjson吗?如果是这样,您可以导入SBJSON.h。然后你的字典有一个新方法jsonRepresentation,它为你提供了序列化的字符串。然后可以保存此字符串。如果从userdefaults中获取String,则可以在字符串上调用JSONValue,它将返回字典。 - huesforalice
不,我正在尝试使用NSJsonSerialization.Serialize它会抛出异常。我还没有学会如何在MonoTouch项目中使用objective-c库......我现在似乎已经到了 - iLemming
哦,我没有意识到你在谈论单声道触摸,抱歉... - huesforalice


答案:


这是一个数组的例子(许多字符串用一个键保存):

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

以及使用单个键保存字典(key = value)的示例:

        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]);
        }

12
2017-10-05 20:56





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


1
2017-10-05 16:29



我想过序列化的东西,但我不能通过使用NSObject.FromObject()将我的对象变成NSObject ...它返回null ... - iLemming
你在用sbjson吗?如果是这样,您可以导入SBJSON.h。然后你的字典有一个新方法jsonRepresentation,它为你提供了序列化的字符串。然后可以保存此字符串。如果从userdefaults中获取String,则可以在字符串上调用JSONValue,它将返回字典。 - huesforalice
不,我正在尝试使用NSJsonSerialization.Serialize它会抛出异常。我还没有学会如何在MonoTouch项目中使用objective-c库......我现在似乎已经到了 - iLemming
哦,我没有意识到你在谈论单声道触摸,抱歉... - huesforalice


我很难得到 NSUserDefaults 存储词典。我最终做的,只是获取Documents目录,并在应用程序终止或转到后台时将我的字典保存到文件中,然后在应用程序完成加载时从文件中加载它。 NSDictionary 和 NSMutableDictionary 具有从文件加载或保存的类方法 - 它使用序列化的XML,因此它非常优雅。

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


1
2017-10-10 03:30