Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin iOS-Mapkit ArgumentNullException:值不能为null_C#_Ios_Xamarin_Xamarin.ios_Xamarin.forms - Fatal编程技术网

C# Xamarin iOS-Mapkit ArgumentNullException:值不能为null

C# Xamarin iOS-Mapkit ArgumentNullException:值不能为null,c#,ios,xamarin,xamarin.ios,xamarin.forms,C#,Ios,Xamarin,Xamarin.ios,Xamarin.forms,我的问题类似于,但我不确定我的代码与另一篇文章中给出的答案有何关联 我正在Xamarin-iOS中使用MapKit为我的Xamarin-iOS项目创建自定义地图。我现在有一些不同的自定义内容,我正在使用添加到地图中的多边形注释和圆圈 我刚刚开始实施向地图添加MKCircle,但当我尝试向地图添加圆形覆盖时,收到以下错误: System.ArgumentNullException: Value cannot be null. Parameter name: polygon 我想这是我试图返回相同

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

我正在
Xamarin-iOS
中使用
MapKit
为我的Xamarin-iOS项目创建自定义地图。我现在有一些不同的自定义内容,我正在使用添加到地图中的
多边形
注释
圆圈

我刚刚开始实施向地图添加
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;
    }
是否需要像这样向渲染器代码中添加内容?:

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

circlerender=新的mkcirclerender(覆盖为MKCircle){}

看来您的所有覆盖都是基于
MKCircle
的:

var overlay = MKCircle.Circle(coords[i]
在您的
GetOverlayRenderer
中,您将所有接收到的覆盖都转换为
MKPolygon
对象,这将导致一个空对象

polygonRenderer = new MKPolygonRenderer(overlay as MKPolygon)
然后,您将尝试为每个覆盖创建一个
MKPolygonRenderer
渲染,如果您确实有一个基于MKCircle的覆盖,该渲染将不起作用

如果您的所有叠加都是基于
MKCircle
的,则使用“是”:

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

overlayWrapper为null,GetNSObject返回null,GetNSObject的结果无法转换为IMKOverlay,或者overlay无法转换为MKPolygon。如果隐式强制转换失败,您将得到null。overlayWrapper为null,GetNSObject返回null,GetNSObject的结果不能强制转换为IMKOverlay,或者overlay不能强制转换为MKPolygon。如果隐式强制转换失败,您将得到null。非常感谢@SushiHangover,因此类似switch语句的语句在这种情况下会很好?@BarneyChambers是的,如果
getoverwayrenderer
接收到不同类型的
IMKOverlay
,则可以使用使用“模式匹配”的开关,就像我在这里的例子:非常感谢@SushiHangover,所以像switch语句这样的语句在这种情况下会很好?@BarneyChambers是的,如果
GetOverlayRenderer
接收到不同类型的
IMKOverlay
,那么可以使用使用“模式匹配”的开关,如我在这里的例子中所示: