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

Phi*_*mid 2 nsuserdefaults xamarin.ios

我在一个简单的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"));
Run Code Online (Sandbox Code Playgroud)

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

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

pou*_*pou 8

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

所以你需要写:

        NSUserDefaults.StandardUserDefaults.SetString ("myName", "spid");
        NSUserDefaults.StandardUserDefaults.SetString ("myDomain", "spdomain");
        NSUserDefaults.StandardUserDefaults.SetString ("myPassword", "sppwd");
        NSUserDefaults.StandardUserDefaults.Synchronize();
Run Code Online (Sandbox Code Playgroud)

获得正确的行为.