我只是在试着保存/恢复几个副本。我所看到的是,它在连接到调试器时可以工作,但在应用程序关闭15分钟后-重新启动应用程序,它会为两个doubles恢复"-180“。
这样看起来对吗?或者你觉得我在存"-180“?
这是与设备,而不是模拟器。我使用的是提供MKUserLocationEventArgs的Map.DidUpdateUserLocation。
不知何故,它给出了-180,-180表示位置。可能是Xamarin bug?
private CLLocationCoordinate2D GetLastLocation()
{
var user = NSUserDefaults.StandardUserDefaults;
double lat = user.DoubleForKey ("LastPositionLat");
double lng = user.DoubleForKey ("LastPositionLng");
var location = new CLLocationCoordinate2D (lat, lng);
return location;
}
private void SaveLastLocation(CLLocationCoordinate2D coord)
{
var user = NSUserDefaults.StandardUserDefaults;
user.SetDouble (coord.Latitude, "LastPositionLat");
user.SetDouble (coord.Longitude, "LastPositionLng");
user.Synchronize ();
}发布于 2015-03-07 00:59:10
这个问题很老了,但我突然想到了一个原因,我们看到了非常奇怪的行为,将NSUserDefaults.StandardUserdefaults存储在局部变量中,然后反复访问它。
Xamarin.iOS绑定中的一些东西(至少对于MonoTouch来说,即非统一的API)在那里被破坏了,很可能是GC问题,对象失去了它的原生对等体。我们的代码库中有这样的代码:
// it appears that capturing an instance of NSUserDefaults.StandardUserdefaults in a variable does not work in every case
// we have observed a voodoo bug when reading a written value from such an instance would fail (as I said, voodoo!)
// thus, we directly access standard user defaults here always via the lambda发布于 2015-09-07 20:30:29
发布于 2013-08-07 07:21:42
-180看起来很可疑,因为它不是0或MAX double,而且看起来与坐标有关。也许在位置管理器有时间定位用户之前,您已经获取了用户的位置。您可能会检查位置管理器提供给您的读数是否不超过15秒。它通常会在获取最新位置锁的同时为您提供最后一个位置锁。-180可能是模拟器给你的‘最后已知位置’。
我不知道monotouch,但看起来你调用的方法是正确的。
https://stackoverflow.com/questions/18091075
复制相似问题