2
for (int i = 0; i < self.businessArray.count; i++) {
        Business *business = [self.businessArray objectAtIndex:i];
        MapAnnotation *mapAnnotation = [[MapAnnotation alloc] init]; 
        NSLog(@"%f %f", business.coordinate.latitude, business.coordinate.longitude);
        mapAnnotation.title = business.name;
        mapAnnotation.subtitle = business.address1;
        mapAnnotation.coordinate = business.coordinate;
        [bMapView addAnnotation:mapAnnotation];
        NSLog(@"ti %@", mapAnnotation.title);
        NSLog(@"sub %@", mapAnnotation.subtitle);
        NSLog(@"coo %f %f", mapAnnotation.coordinate.latitude, mapAnnotation.coordinate.longitude);
    }

- (MKAnnotationView *) mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
{
    MKPinAnnotationView *pinView;

    if (annotation != mapView.userLocation) {
        static NSString *defauleID = @"myLocation";
        //        pinView = (MKPinAnnotationView*)[mapView dequeueReusableAnnotationViewWithIdentifier:defauleID];
        if (pinView == nil) {
            pinView = [[MKPinAnnotationView alloc] initWithAnnotation: annotation reuseIdentifier:defauleID];
        }
        pinView.pinColor = MKPinAnnotationColorGreen;
        pinView.canShowCallout = YES;
        pinView.animatesDrop = YES;

        UIButton* rightButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
        [rightButton setTitle:annotation.title forState:UIControlStateNormal];
        [rightButton addTarget:self 
                        action:@selector(showDetails:) forControlEvents:UIControlEventTouchUpInside];
        pinView.rightCalloutAccessoryView = rightButton;
    }

    return pinView;
}

エラー: クラス MapAnnotation のインスタンス 0x1cdd97b0 の割り当てが解除されましたが、キー値オブザーバーがまだ登録されていました。観測情報が漏洩し、誤って他の天体に付着する可能性さえあります。NSKVODeallocateBreak にブレークポイントを設定して、デバッガーでここで停止します。現在の観測情報は次のとおりです: (コンテキスト: 0x0、プロパティ: 0x1cd97a30>

4

2 に答える 2

0

ループ内で毎回注釈を解放する

    for (int i = 0; i < self.businessArray.count; i++) {
            Business *business = [self.businessArray objectAtIndex:i];
            MapAnnotation *mapAnnotation = [[MapAnnotation alloc] init]; 
            NSLog(@"%f %f", business.coordinate.latitude, business.coordinate.longitude);
            mapAnnotation.title = business.name;
            mapAnnotation.subtitle = business.address1;
            mapAnnotation.coordinate = business.coordinate;
            NSLog(@"ti %@", mapAnnotation.title);
            NSLog(@"sub %@", mapAnnotation.subtitle);
            NSLog(@"coo %f %f", mapAnnotation.coordinate.latitude, mapAnnotation.coordinate.longitude);
            [bMapView addAnnotation:mapAnnotation];
            [mapAnnotation release];
        }
于 2012-06-27T07:30:43.117 に答える
0

オブザーバーを追加して通知を受け取ったと思います..その通知を受け取り、そのオブザーバーに関連付けられた関数を実行してMapAnnotationの割り当てを解除しますが、そのオブザーバーを削除していない場合は、オブザーバーも削除してください...

 [[NSNotificationCenter defaultSenter] removeObserver:self];

これがあなたを助けることを願っています..

于 2012-06-27T07:47:02.853 に答える