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
,那么可以使用使用“模式匹配”的开关,如我在这里的例子中所示: