Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# N-沙马林_C#_Iphone_Xamarin.ios_Xamarin - Fatal编程技术网

C# N-沙马林

C# N-沙马林,c#,iphone,xamarin.ios,xamarin,C#,Iphone,Xamarin.ios,Xamarin,我只是想保存/恢复两倍。我所看到的是,它在连接到调试器时可以工作,但在关闭应用程序15分钟后,重新启动应用程序,它会为两个双倍恢复“-180” 这个看起来对吗?还是你认为我在节省“-180” 这是与设备,而不是模拟器。我使用的是Map.DidUpdateUserLocation,它给出了MKUserLocationEventArgs不知怎的,它给出了-180,-180作为位置。可能是Xamarin病毒 private CLLocationCoordinate2D GetLastLocat

我只是想保存/恢复两倍。我所看到的是,它在连接到调试器时可以工作,但在关闭应用程序15分钟后,重新启动应用程序,它会为两个双倍恢复“-180”

这个看起来对吗?还是你认为我在节省“-180”


这是与设备,而不是模拟器。我使用的是
Map.DidUpdateUserLocation
,它给出了
MKUserLocationEventArgs


不知怎的,它给出了-180,-180作为位置。可能是Xamarin病毒

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

-180显然是可疑的,因为它不是0或MAX double,似乎与坐标有关。也许您是在位置管理器有时间找到用户之前抓取了他们的位置。您可以检查位置管理器提供的读数是否不超过15秒。它通常会在获取最新位置锁时为您提供最后一个位置锁-180可能是模拟器给你的“最后一个已知位置”


我不知道monotouch,但看起来你调用了正确的方法。

这个问题很老了,但它突然向我袭来,原因之一是,我们看到了非常奇怪的行为,将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

我发现模拟器中的应用程序Id将在您从xamarin studio重新启动后更改。它可能会破坏NSUserDefaults存储,要检查它,您可以通过触摸模拟器上的应用程序图标重新启动应用程序。

也许您可以使用nuget软件包来处理(PCL)设置,您可以在github上找到这些设置,或者通过nuget安装这些设置


过去,我在许多项目中使用过这个库,从未向我展示过任何奇怪的值。请注意,如果您再次看到“-180”出现,则表示代码中的某个地方正在写入该值。

但这是针对设备而不是模拟器。我正在使用Map.DidUpdateUserLocation,它提供MKUserLocationEventArgs。不知怎的,它给出了-180,-180的位置。Xamarin bug?很有趣,我无法确定这是否是修复方案。我退出了我正在进行的这个辅助项目。如果有人可以确认,那么我将标记为answer它是否也在设备上运行?不确定,您可以检查它,运行时应用程序资源的路径,包含应用程序ID,并且每次启动时它都会不同。很难相信。这将破坏所有存储,没有人可以调试。我的问题在设备上,未连接到调试器。你在哪里调用
SaveLastLocation()
方法?