0

アプリで「...アドレスの割り当て解除されたインスタンスに送信されました...」というメッセージが表示されてクラッシュします。そこで、ゾンビインストゥルメントを使用してアプリを分析し、クラッシュの原因となるコードの断片を以下に示しました。このエラーの原因となるシナリオはまだ見つかりません。

(void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control
{
if ([view.annotation isKindOfClass:[MKUserLocation class]]) {
}
else {
    CustomAnnotation *ann = (CustomAnnotation *) view.annotation;
    if (ann.annotationType == BusAnnotationType) {
        NSLog(@"accessory button tapped for annotation %@", view.annotation);
        BusInfoViewController *viewController = [[BusInfoViewController alloc] initWithNibName:@"BusInfoViewController" bundle:nil];
        BusForStation *bus = [self getBusWithId:[(CustomAnnotation *)view.annotation ID]];
        viewController.currentBus = bus;
        [self.navigationController pushViewController:viewController animated:YES];
        [viewController release];
    }
}

アナライザーツールは、[self.navigationController pushViewController:viewControllerアニメーション:YES]の行で91.4%を取得します。

誰かが何が問題なのか知っていますか?

4

3 に答える 3

3

ARCに変換せずに同様の問題を解決したと思います。mapViewを含むviewControllerを持つnavigationControllerがあります。ビューがロードされたら、を呼び出しますsetRegion:myregion animated:YES。アニメーションが完了する前に[戻る]をクリックすると、mapViewはメッセージに対して「割り当て解除されたインスタンスに送信された[respondsToSelector:]メッセージ」エラーを発生させます。myMapView.delegate = nilmyMapViewをリリースする前に設定することでこれを修正しました。

于 2013-02-13T18:59:28.817 に答える
1

ARC(自動参照カウント)の使用を検討してください。Xcodeは、Menuを使用してプロジェクトをほぼ完全に自動的に変換できます"Edit" ➞ "Refactor" ➞ "Convert to Objective-C ARC…"。手動でメモリを管理し続ける理由はごくわずかです。

静的アナライザーの実行を試すこともできます(メニュー"Product" ➞ "Analyze")。

于 2012-08-13T10:04:14.370 に答える
0

あなたが抱えている問題は、viewControllerをビューにプッシュした直後にリリースしていることだと思います。また、(BusInfoViewControllerで)setCurrentBusの独自の実装を行った場合、問題が発生する可能性があります。

于 2012-08-13T10:43:21.463 に答える