Xamarin.ios NSUserDefaults.StandardUserDefaults.SetString()未持久化

Xamarin.ios NSUserDefaults.StandardUserDefaults.SetString()未持久化,xamarin.ios,nsuserdefaults,Xamarin.ios,Nsuserdefaults,我在一个简单的MonoTouch iPad应用程序中使用以下代码: if (NSUserDefaults.StandardUserDefaults.StringForKey("spid") == null) { NSUserDefaults.StandardUserDefaults.SetString ("spid", "myName"); NSUserDefaults.StandardUserDefaults.S

我在一个简单的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()调用也不能解决这个问题。

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

所以你需要写:

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

获得正确的行为。

LOL-我想我下次应该更仔细地阅读工具提示。切换顺序确实解决了问题。+1这是一个常见的问题!您还可以使用
\u首选项[“键”]=new-NSString(值)