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.
まず、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.