Xamarin.ios NSUserDefaults无法在Xamarin中保存NSDictionary数据

Xamarin.ios NSUserDefaults无法在Xamarin中保存NSDictionary数据,xamarin.ios,xamarin,Xamarin.ios,Xamarin,在B Viewcontroller中,我将数据存储到NSUserDefaults中,并在AViewController中检索它们 在执行过程中,它按预期执行。然而,一旦我关闭并重新运行应用程序,我发现这些信息(字典)不会被存储 这里是BViewController,我将数据存储在NSUserDefaults中 partial class BViewController : UIViewController { const string server = "server"; con

在B Viewcontroller中,我将数据存储到NSUserDefaults中,并在AViewController中检索它们

在执行过程中,它按预期执行。然而,一旦我关闭并重新运行应用程序,我发现这些信息(字典)不会被存储

这里是BViewController,我将数据存储在NSUserDefaults中

partial class BViewController : UIViewController
{
    const string server = "server";
    const string port = "port";
    const string password = "password";
    const string username = "username";
    const string inboxuserid = "inboxuserid";
    .............
    .............



  public override void ViewWillDisappear (bool animated)
  {
    var appDefaults = new NSDictionary (server, serverTF.Text, port, portTF.Text, password, passwordTF.Text,username,usernameTF.Text, inboxuserid,inboxuserTF.Text);
    NSUserDefaults.StandardUserDefaults.RegisterDefaults (appDefaults);
    NSUserDefaults.StandardUserDefaults.Synchronize ();
  }

}
并在ViewController中检索它们,如下所示:

partial class AViewController : UIViewController
 {
  public override void ViewWillAppear(bool animated)
   {
    var username = NSUserDefaults.StandardUserDefaults.StringForKey ("username");
    Console.WriteLine (username);
    }
}

根据以下条款:

我将提出以下代码,我已经用一个小示例进行了测试,结果很好

BViewController,将字典存储在NSUserDefaults中:

NSDictionary appDefaults= new NSDictionary(server, serverTF.Text, port, portTF.Text, password, passwordTF.Text, username, usernameTF.Text, inboxuserid, inboxuserTF.Text);
NSString key = new NSString ("dict");
NSUserDefaults.StandardUserDefaults.SetValueForKey (appDefaults, key);
NSString key = new NSString ("dict");
NSDictionary d2 = NSUserDefaults.StandardUserDefaults.DictionaryForKey (key);
Console.WriteLine (d2["username"]);
AViewController,从NSUserDefaults检索字典:

NSDictionary appDefaults= new NSDictionary(server, serverTF.Text, port, portTF.Text, password, passwordTF.Text, username, usernameTF.Text, inboxuserid, inboxuserTF.Text);
NSString key = new NSString ("dict");
NSUserDefaults.StandardUserDefaults.SetValueForKey (appDefaults, key);
NSString key = new NSString ("dict");
NSDictionary d2 = NSUserDefaults.StandardUserDefaults.DictionaryForKey (key);
Console.WriteLine (d2["username"]);

您不应该在A控制器中调用RegisterDefaults或Synchronize。@Jason,我应该调用什么?如何将nsdictionary传递给nsuserdefaults?您已在B控制器中调用RegisterDefaults。你不需要多次这样做。好的,我已经修复了你指出的方式,仍然是同一个问题。我想我的问题主要是关于NSSERDEFAULT中的nsdictionary。因为我已经用一个简单的字符串进行了测试,并且在应用程序重新打开后存储和检索了简单的字符串。我可以分别存储每个字符串,但是使用nsdictionary可以使形状更好。但是,我想知道与之前的解决方案的主要区别是什么。你能详细说明一下吗?请检查以下答案,即使是这个答案: