NSUserDefaults.StandardUserDefaults - 保存和检索字典

11

大家能帮我吗?我找到了如何保存和检索简单对象以将它们用作应用程序设置。

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

现在,如果我需要保存多个用户名(任意数量),该怎么办? 并且如果我需要保存多个用户名和密码或密码哈希值怎么办?

3个回答

12

这里有一个关于数组的例子(许多字符串使用一个键保留):

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

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

我考虑过序列化一些东西,但是我无法通过使用NSObject.FromObject()将我的对象转换为NSObject...它返回null... - iLemming
你正在使用sbjson吗?如果是这样,你可以导入SBJSON.h。然后你的字典就有了一个新方法jsonRepresentation,它可以给你序列化的字符串。你可以把这个字符串保存下来。如果你从userdefaults中获取了这个字符串,你可以在这个字符串上调用JSONValue,它会返回一个字典。 - huesforalice
不,我正在尝试使用NSJsonSerialization.Serialize,但它抛出了一个异常。我还没有学习如何在MonoTouch项目中使用Objective-C库...现在似乎我必须去学习。 - iLemming

1

我在使用NSUserDefaults存储字典时遇到了麻烦。最终我做的是,获取文档目录,在应用程序终止或进入后台时将我的字典保存到文件中,然后在应用程序完成加载时从文件中加载它。 NSDictionaryNSMutableDictionary有类方法可以从文件中加载或保存数据 - 它使用序列化XML,所以非常简洁优雅。

如果您的应用程序不需要大量数据,并且数据简单且结构流动,则此方法非常好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接