Xamarin.ios NSUserDefaults.StandardUserDefaults.SetString()未持久化
我在一个简单的MonoTouch iPad应用程序中使用以下代码: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
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(值)代码>