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()调用也无法解决问题.
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)
获得正确的行为.