iOS 更新后应用保存数据丢失

iOS app saved data lost after updating

我有一个 iPhone 应用程序,我使用 Xamarin 开发并在 HockeyApp 上发布。每当我在 HockeyApp 上放置一个新版本的应用程序并且有人在他们的 phone 上更新他们当前的安装时,他们会丢失保存的数据。有什么办法可以防止这种情况吗?

编辑

我有一项权利,允许我也与我的小部件共享数据。这可能是问题所在吗?这就是我 writing/reading 数据的方式:

this.nsUserDefaults = new NSUserDefaults("myGroupId", NSUserDefaultsType.SuiteName);

// Write data:
this.nsUserDefaults.SetString("myValue", "myKey");
this.nsUserDefaults.Synchronize();

// Read data:
string myValue = this.nsUserDefaults.StringForKey("myKey");

编辑

将上面的代码更改为以下代码后,现在更新后保存的数据仍然存在:

// Write data:
NSUserDefaults.StandardUserDefaults.SetString("myValue", "myKey");
NSUserDefaults.StandardUserDefaults.Synchronize();
// Read data:
string myValue = NSUserDefaults.StandardUserDefaults.StringForKey("myKey");

但是现在我将无法与我的小部件共享数据...如何解决这个问题同时仍然能够与我的小部件共享数据?

如果你在调用this.nsUserDefaults.Synchronize();之前尝试读取数据,你将得不到数据。

所以如果你这样做:

this.nsUserDefaults = new NSUserDefaults("myGroupId", NSUserDefaultsType.SuiteName);

// Read data:
string myValue = this.nsUserDefaults.StringForKey("myKey");

您不会获得数据。但是如果你在读取之前调用 Synchronize() 方法你会得到数据:

this.nsUserDefaults = new NSUserDefaults("myGroupId", NSUserDefaultsType.SuiteName);
this.nsUserDefaults.Synchronize();

// Read data:
string myValue = this.nsUserDefaults.StringForKey("myKey");