【问题标题】:Xamarin Forms - iOS CLLocationCoordinate2D is not initializing correctlyXamarin Forms - iOS CLLocationCoordinate2D 未正确初始化
【发布时间】:2020-01-11 10:47:17
【问题描述】:

我正在尝试在我拥有的 iOS 自定义渲染中初始化 CLLocationCoordinate2D 类,并且在构造函数中我可以传递 LatitudeLongitude(双, 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 进行托管,这是最后一段代码的屏幕截图:

注意:我多次删除了该应用程序,还从项目文件夹中删除了 binobj 文件夹,并对解决方案进行了清理和重建,我'我 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


【解决方案1】:

我发现 OnElementPropertyChanged 几乎同时被同一个属性调用了两次,而且似乎在 iOS 中,即使该属性以默认值开头,它总是首先在 PropertyChanged 上传递,我只需要为了防止对同一事件进行多次调用并解决了我的问题,我希望有人能给出比这更好的答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2020-04-21
    • 2012-06-17
    • 2022-01-22
    • 2014-10-24
    相关资源
    最近更新 更多