2012-05-10 11 views
0

私はMapViewを使用するアプリケーションを持っており、4種類のMKAnnotationがあります。私は画面上に4つのボタンも持っています。各ボタンは、MKannotationタイプの1つを表示または非表示にする必要があります。 タイプを追跡して削除することができますが、MKannotationを追加しようとするとエラーメッセージが表示されます。検索後、私は答えられていない同様の問題を発見した。マップビューからMKAnnotationを追加して削除する

An instance 0x6ec5750 of class MapPoint was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. 

ios5 removing annotation from a mapview

私は、Webサービスを呼び出した後からMKAnnotationを追加しているすべての最初:

for (int x=0; x<PromotionsArray.count; x++) 
{ 
    Promotion *pr = [PromotionsArray objectAtIndex:x]; 
    CLLocationCoordinate2D newCoord ={ pr.promotionLatitude, pr.promotionLongitude}; 
    MapPoint *mp= [[MapPoint alloc] initWithCoordinate:newCoord]; 
    mp.currentTitle=pr.PromotionTitle; 
    mp.currentSubTitle=pr.RetailerName; 
    mp.currentPromotionArrayID=[NSString stringWithFormat:@"%d",x]; 
    mp.currentRetailerID = pr.RetailerID; 
    mp.currentPromotionType = pr.PromotionType; 
    [mapView addAnnotation:mp]; 
} 

は、今私は、男のビューの4つのボタンがあります。タイプ1、タイプ2、タイプ3、タイプ4のボタン。 私はType1のボタンをクリックした場合、それは完璧に動作する次のコードを使用して、タイプ1のすべてMKAnnotationを削除します:私は再びType1のを表示したい場合は

for (id <MKAnnotation> myAnnot in [mapView annotations]) 
    { 
     if (![myAnnot isKindOfClass:[MKUserLocation class]]) 
     { 
      if([(MapPoint *)myAnnot currentPromotionType]==PromotionType1) 
      { 
       NSLog(@"Hiding All Type1 Annotations"); 
       [mapView removeAnnotation:myAnnot]; 
      } 
     } 
    } 

は今、私は問題を引き起こす次のコードを使用します:

for (int x=0; x<PromotionsArray.count; x++) 
    { 
     Promotion *pr = [PromotionsArray objectAtIndex:x]; 
     if (pr.promotionType==PromotionType1) 
     { 
      CLLocationCoordinate2D newCoord ={ [pr.promotionLatitude doubleValue],[pr.promotionLongitude doubleValue]}; 
      MapPoint *map= [[MapPoint alloc] initWithCoordinate:newCoord]; 
      map.currentTitle=pr.PromotionTitle; 
      map.currentSubTitle=pr.RetailerName; 
      map.currentPromotionArrayID=[NSString stringWithFormat:@"%d",x]; 
      [mapView addAnnotation:map]; 
     } 
    } 

問題は、このライン [MapViewのaddAnnotation:マップ]に表示されます。 今私はrelierたエラーメッセージ(ここではそれが再びです)

An instance 0x6ec5750 of class MapPoint was deallocated while key value observers were still registered with it. Observation info was leaked, and may even become mistakenly attached to some other object. 
+0

エラーメッセージには何が表示されますか? – bbarnhart

+1

はい、正確にエラーメッセージが表示され、アノテーションを追加するコードを投稿してください。エラーが「キー値オブザーバがまだ登録されている間に割り当てが解除された」場合、注釈の座標が無効であるために発生する可能性があります。 – Anna

+0

エラーはリンク内のエラーと同じです。私は、エラーメッセージで質問を更新しました。 – Kassem

答えて

0

作品の原因となる、問題は全く別の方法です。 私はこれを行うことにより、NSStringのに二重の値を変換しようとしていた。

[Nsstring stringWithFormat:@"%d",doubleVal]; 

% dは%Fでなければなりません!!!!!それは愚かな小さな間違いだった。 あなたのヒントのために助けと@AnnaKareninaに感謝します。

0
// REMOVING ALL ANNOTATION 
    for (id <MKAnnotation> myAnnot in [objMapView annotations]) 
    { 
     if (![myAnnot isKindOfClass:[MKUserLocation class]]) 
     { 
      [objMapView removeAnnotation:myAnnot]; 
     } 
    } 
関連する問題