c# - Xamarin iOS - Mapkit ArgumentNullException : Value cannot be null

标签 c# ios xamarin xamarin.ios xamarin.forms

我的问题类似于this但我不确定我的代码与另一篇文章中给出的答案有何关系。

我在 Xamarin iOS 中使用 MapKit 为我的 Xamarin iOS 项目创建自定义 map 。我现在有一些不同的自定义事物,正在使用 Polygons annotations 和现在添加到我的 map 中的 circles

我刚刚开始将 MKCircle 添加到我的 map ,但是当我尝试将 Circle Overlays 添加到我的 map 时,我收到此错误:

System.ArgumentNullException: Value cannot be null. Parameter name: polygon

我认为我正在尝试将相同的叠加层返回给两个渲染器,但我不确定如何修改它。 这是我的代码:

for(int i=0; i < hazards.Count; i++) //This adds 3 circles in my example
{
    LatLong ltlng = JsonConvert.DeserializeObject<LatLong>(hazards[i].coordinates);
    coords[i].Latitude = Convert.ToDouble(ltlng.latitude);
    coords[i].Longitude = Convert.ToDouble(ltlng.longitude);
    var overlay = MKCircle.Circle(coords[i], Convert.ToDouble(hazards[i].radius));
    nativeMap.AddOverlay(overlay); //this is the suspected problem
}

我的渲染器代码在这里:

    MKOverlayRenderer GetOverlayRenderer(MKMapView mapView, IMKOverlay overlayWrapper)
    {
        if (!Equals(overlayWrapper, null))
        {
            var overlay = ObjCRuntime.Runtime.GetNSObject(overlayWrapper.Handle) as IMKOverlay;
            polygonRenderer = new MKPolygonRenderer(overlay as MKPolygon)
            {
                FillColor = UIColor.Red,
                StrokeColor = UIColor.Blue,
                Alpha = 0.4f,
                LineWidth = 9
            };
        }
        return polygonRenderer;
    }

我是否需要像这样向渲染器代码中添加一些内容?

circleRenderer = new MKCircleRenderer(overlay as MKCircle){};

最佳答案

看起来你所有的叠加层都是基于 MKCircle 的:

var overlay = MKCircle.Circle(coords[i]

在您的 GetOverlayRenderer 中,您将所有作为 MKPolygon 对象接收的叠加层转换,这将导致空对象。

polygonRenderer = new MKPolygonRenderer(overlay as MKPolygon)

然后您将尝试为每个叠加层创建一个 MKPolygonRenderer 渲染,如果您确实有一个基于 MKCircle 的叠加层,这将不起作用。

如果您所有的叠加层都是基于 MKCircle 的,那么可以使用:

new MKCircleRenderer(overlay as MKCircle){};

关于c# - Xamarin iOS - Mapkit ArgumentNullException : Value cannot be null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46556956/

相关文章:

android - 如何在后台运行加速度计?

c# - iPad 上的 iOS 应用程序删除点十进制值

c# - 获取线程的可见窗口的标题

ios - 使用适用于 iOS 的 OpenCV 框架的 Apple Mach-O Linker (Id) 错误

ios - TDD:单元测试异步调用

ios - 带有两个自定义单元格的 UITableView 未正确显示

c# - WebBrowser 控件和 JavaScript 错误

c# - 文本框中的永久前缀

ios - Xamarin 上的 retrofit 更新包

xamarin - 如何使用 Xamarin IOS 远程模拟器