2017-10-04 16 views
0

私の質問はthisに似ていますが、私のコードが他の投稿に記載されている回答にどのように関係しているかわかりません。Xamarin iOS - Mapkit ArgumentNullException:値はnullにできません

Xamarin iOSMapKitを使用して、私のXamarin iOSプロジェクトのカスタムマップを作成しています。私は現時点でいくつかのカスタムのことが起こっており、Polygonsannotationsと今はcirclesを使っています。

私はちょうど私のマップにMKCircleを追加することが、私は自分のマップにサークルオーバーレイを追加しようとしたとき、私は、このエラーが発生します実装し始めています:

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

私は私が同じことを返すようにしようとされていると思います2つのレンダラーにオーバーレイするが、私はこれをどのように嫌うかわからない。ここは私のコードです:

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

+0

overlayWrapperがnullの場合、GetNSObjectはGetNSObjectの結果はIMKOverlayにキャストすることができない、nullを返し、またはオーバーレイはできませんMKポリゴンにキャストしてください。暗黙のキャストが失敗した場合、nullが返されます。 – john

答えて

3

It appea RSすべてのオーバーレイがMKCircleをベースとしている:

var overlay = MKCircle.Circle(coords[i] 

あなたはすべてのオーバーレイをキャストあなたGetOverlayRendererではnullオブジェクトになりますMKPolygonオブジェクトとして受け取りました。

polygonRenderer = new MKPolygonRenderer(overlay as MKPolygon) 

その後、MKPolygonRendererはあなたが実際にMKCircleベースのオーバーレイを持っていた場合は動作しないと、あなたのオーバーレイごとにレンダリングを作成しようとしています。

場合は、すべてのオーバーレイはMKCircleに基づいて、[はい使用:

new MKCircleRenderer(overlay as MKCircle){}; 
+0

@SushiHangoverに感謝します。switch文のようなものは、この場合には良いでしょうか? –

+1

@BarneyChambersはい、 'GetOverlayRenderer'で受け取った' IMKOverlay'の種類が異なる場合、私の例のように "pattern matching"を使ったスイッチを使うことができます:https://stackoverflow.com/a/46148412/ 4984832 – SushiHangover

関連する問題