NSUserDefaults.StandardUserDefaults.SetString()不会持久化

时间:2012-09-13 21:28:28

标签: xamarin.ios nsuserdefaults

我在简单的MonoTouch iPad应用程序中使用以下代码:

        if (NSUserDefaults.StandardUserDefaults.StringForKey("spid") == null) 
        {
            NSUserDefaults.StandardUserDefaults.SetString ("spid", "myName");
            NSUserDefaults.StandardUserDefaults.SetString ("spdomain", "myDomain");
            NSUserDefaults.StandardUserDefaults.SetString ("sppwd", "myPassword");
            NSUserDefaults.StandardUserDefaults.Synchronize();
        }

        WebClient wc = new WebClient();
        wc.Credentials = new NetworkCredential(NSUserDefaults.StandardUserDefaults.StringForKey("spid"), 
                                               NSUserDefaults.StandardUserDefaults.StringForKey("sppwd"), 
                                               NSUserDefaults.StandardUserDefaults.StringForKey("spdomain"));

意图(现在直到我建立了正确的视图)是提供默认凭据,这些凭证将存储在plist文件中(稍后它将被移动到KeyChain中以获得更好的安全性)。但是,对StringForKey(“spid”)等的调用返回null而不是“myName”。

为什么在调用Synchronize()后我的默认值不会保留?即使在每个SetString()之后添加Synchronize()调用也无法解决问题。

1 个答案:

答案 0 :(得分:8)

SetString的参数遵循Apple API(以及惯例,对于.NET开发人员来说相当混乱,包括我),第一个参数包含,第二个参数作为名称

所以你需要写:

        NSUserDefaults.StandardUserDefaults.SetString ("myName", "spid");
        NSUserDefaults.StandardUserDefaults.SetString ("myDomain", "spdomain");
        NSUserDefaults.StandardUserDefaults.SetString ("myPassword", "sppwd");
        NSUserDefaults.StandardUserDefaults.Synchronize();

以获得正确的行为。