Xamarin iOS - Mapkit ArgumentNullException:值不能为null

时间:2017-10-04 04:19:30

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

我的问题与this类似,但我不确定我的代码与其他帖子中给出的答案有何关联。

我在MapKit中使用Xamarin iOS为我的Xamarin iOS项目创建自定义地图。我目前正在进行一些不同的自定义操作,并使用Polygons annotationscircles添加到我的地图中。

我刚刚开始实施向地图添加MKCircle,但当我尝试将圆形叠加添加到我的地图时,我收到此错误:

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

1 个答案:

答案 0 :(得分:3)

所有叠加层的显示基于import tensorflow as tf Dataset = tf.contrib.data.Dataset it2 = Dataset.range(5).make_one_shot_iterator() das_dataset = Dataset.from_tensors(0).repeat().map(lambda _: it2.get_next()) das_dataset_it = das_dataset.make_one_shot_iterator() with tf.Session() as sess: while True: print(sess.run(it2.get_next())) print(sess.run(das_dataset_it.get_next()))

MKCircle

var overlay = MKCircle.Circle(coords[i] 中,您将所有重叠的广告作为GetOverlayRenderer对象投放,这将导致空对象。

MKPolygon

然后,您尝试为每个叠加层创建一个polygonRenderer = new MKPolygonRenderer(overlay as MKPolygon) 渲染,如果您确实拥有基于MKCircle的叠加层,则无效。

如果所有叠加层都基于MKPolygonRenderer,那么请使用:

MKCircle