【问题标题】:NSUserDefaults can not save NSDictionary Data in XamarinNSUserDefaults 无法在 Xamarin 中保存 NSDictionary 数据
【发布时间】:2015-02-17 01:53:33
【问题描述】:

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

在执行期间,它按预期执行。但是,一旦我关闭并重新运行应用程序,我发现这些信息(字典)并没有被存储。

这是我在 NSUserDefaults 中存储数据的 BViewController

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 ();
  }

}

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

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

【问题讨论】:

  • 你不应该在你的 A 控制器中调用 RegisterDefaults 或 Synchronize。
  • @Jason,我该怎么称呼?我应该如何将 nsdictionary 传递给 nsuserdefaults?
  • 您已经在 B 控制器中调用 RegisterDefaults。您无需多次执行此操作。
  • 好的,我已经修复了你指出的方式,仍然是同样的问题。我认为我的问题主要是关于 nsuserdefaults 中的 nsdictionary。因为我已经测试了一个简单的字符串以及在应用程序重新打开后存储和检索的简单字符串。我可以单独存储每个字符串,但是使用 nsdictionary 可以得到更好的形状。

标签: xamarin.ios xamarin


【解决方案1】:

基于以下文章:https://moovendan.wordpress.com/2012/12/26/monotouch-nsuserdefaults-store-values-in-settings/

我会提出以下代码,我已经用一个小例子进行了测试,它确实有效。

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);

AViewController,从 NSUserDefaults 中检索字典:

NSString key = new NSString ("dict");
NSDictionary d2 = NSUserDefaults.StandardUserDefaults.DictionaryForKey (key);
Console.WriteLine (d2["username"]);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 1970-01-01
  • 2012-03-14
  • 2013-11-13
相关资源
最近更新 更多