2

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

4

1 回答 1

8

遵循 Apple API的参数SetString(和约定,这对于 .NET 开发人员来说相当混乱,包括我在内),它把第一个参数的和第二个参数作为name

所以你需要写:

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

获得正确的行为。

于 2012-09-13T22:04:04.090 回答