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");
我有一个 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");