我的问题与this相似,但是我不确定我的代码与另一篇文章中给出的答案之间的关系。

我正在MapKit中使用Xamarin iOS为Xamarin iOS项目创建自定义地图。我目前正在发生一些不同的自定义事情,并且正在使用添加到我的地图中的Polygons annotations和现在的circles

我刚刚开始实现向地图添加MKCircle的操作,但是当我尝试向地图添加Circle Overlays时,出现此错误:

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:值不能为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46556956/

10-12 21:28