0

MapViewを使用するアプリがあり、4種類のMKAnnotationがあります。画面には4つのボタンもあります。各ボタンは、MKannotationタイプの1つを表示または非表示にする必要があります。タイプを追跡して削除することはできますが、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マップビューから注釈を削除する

まず、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つのボタンがあります。Type1、Type2、Type3、Type4ボタン。Type1ボタンをクリックすると、完全に機能する次のコードを使用して、Type1のすべてのMKA表記が削除されます。

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

Type1をもう一度表示したい場合は、次のコードを使用すると問題が発生します。

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

問題はこの行に表示されます[mapViewaddAnnotation:map]; これは私が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.
4

2 に答える 2

0
// REMOVING ALL ANNOTATION
    for (id <MKAnnotation>  myAnnot in [objMapView annotations])
    {
        if (![myAnnot isKindOfClass:[MKUserLocation class]])
        {
            [objMapView removeAnnotation:myAnnot];
        }
    }
于 2014-10-09T10:09:47.303 に答える
0

問題はまったく別の方法にあります。私はこれを行うことで倍精度値を NSString に変換しようとしていました:

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

%d は %f でなければなりません!!!!! それはばかげた小さな間違いでした。助けてくれてありがとう、ヒントをくれた@AnnaKarenina

于 2012-05-11T08:00:47.920 に答える