2012-01-15 16 views

答えて

1

マップビューのdelegateプロパティをnilに設定して-viewDidUnload:に設定する必要があります。このクラッシュは、マップビューがデリゲート(ビューコントローラ)にメッセージを送信しようとしたために発生していますが、スタックからポップされた時点で既に割り当て解除されています。

AppleはこれをMKMapViewDelegate Protocol Referenceに渡して説明します。あなたが デリゲートを設定しているためMKMapViewオブジェクトを解放する前に

nilにそのオブジェクトのdelegateプロパティを設定することを忘れないでください。あなたがこれを行うことができる の場所は、 のマップビューを廃棄する-deallocの方法です。

彼らは-deallocdelegateをnillingお勧めしますが、ARCのため、-viewDidUnloadは前進最善の策です。

- (void)viewDidUnload 
{ 
    self.mapView.delegate = nil; 
    self.locationManager.delegate = nil; 
    [super viewDidUnload]; 
} 
+0

ガー!最初は誰ですか? haha :) –

+0

私はあなただと思っています... –

+0

viewDidUnloadは非推奨です – dwery

0

これは、代理コールを受信するオブジェクトを使用する場合の一般的な問題です。問題は、View Controllerの割り当てが解除された後でも、エラーメッセージに示されているように、オブジェクトの1つから呼び出しを受けてしまうことです。彼らは、nilにこれらのオブジェクトのデリゲートを設定することにより、

yourMapView.delegate = nil; 
yourLocationManager.delegate = nil; 

:あなたはあなたのビューコントローラのviewDidUnload方法(いくつかのメモリ管理のためのdeallocはもちろんのこと)をオーバーライドする必要があり、それにはあなたのような何かを置く必要がありますこのビューコントローラがアンロードされると、割り当てられたデリゲートへのアップデートの送信が停止されるため、アプリのクラッシュは中止されます。

関連する問題