【发布时间】:2020-01-11 10:47:17
【问题描述】:
我正在尝试在我拥有的 iOS 自定义渲染中初始化 CLLocationCoordinate2D 类,并且在构造函数中我可以传递 Latitude 和 Longitude(双, double) 作为参数来初始化它,但无论我给出什么值,该类总是带有纬度和经度的默认双精度值。 (0,0),这是我最初尝试初始化它的方式:
CLLocationCoordinate2D iosCoords = new CLLocationCoordinate2D(38.00000000000000, -9.00000000000000);
//This inits has (0,0)
//Note: the double has 14 numbers in the decimal part
也试过了:
CLLocationCoordinate2D iosCoords = new CLLocationCoordinate2D();
iosCoords.Latitude = 38.00000000000000;
iosCoords.Longitude = -9.00000000000000;
//Still (0,0)
然后我认为这可能与我的小数位数有关,所以我简化并发生了最奇怪的事情:
CLLocationCoordinate2D iosCoords = new CLLocationCoordinate2D();
iosCoords.Latitude = 38;
iosCoords.Longitude = -9;
//it gives (0,-9)
有人可以指出我做错了什么或者我应该怎么做?这是非常标准的,所以我不知道是什么原因造成的,或者我什至做错了什么。我正在使用真实设备进行测试,并使用真实的 mac 进行托管,这是最后一段代码的屏幕截图:
注意:我多次删除了该应用程序,还从项目文件夹中删除了 bin 和 obj 文件夹,并对解决方案进行了清理和重建,我'我 90% 确定这不仅仅是调试器的问题,因为坐标会反映到地图中,并且会显示 (0,0) 处的位置。
编辑:经过一些测试,我发现 OnElementPropertyChanged 几乎同时被同一个属性调用了两次,该属性是一个不可为空的布尔值,所以我不知道当值已经相同(默认值,false)时它如何进入方法,所以我只是在属性为真时进行了检查,它停止了这样做。但我仍然不明白我的问题的最后一部分是如何发生的。
【问题讨论】:
-
我刚刚试了一下,对我来说效果很好。你能做 System.Diagnostics.Debug.WriteLine(iosCoords);看看它打印了什么?这看起来像是一个调试器问题,尤其是在您使用 VS for Windows 时。
-
@AndresCastro 我想我找到了问题和解决方案,这段代码在 OnElementPropertyChanged 内,当我的属性更改时,它初始化了这个类,奇怪的是 OnElementPropertyChanged 被触发了两次,在android 它只触发一次,但在 iOS 上(属性是布尔值),即使属性新值与旧值相同,它也会触发,所以我只是检查了属性何时为真,并且类初始化现在正确。如果你能澄清为什么会发生这种情况,以及为什么(即使它同时被调用两次),它也不会初始化
-
我还没有发布解决方案,因为我不知道为什么会发生这种情况,即使我找到了解决方案
标签: debugging xamarin xamarin.forms xamarin.ios location