2

ロケーション クラスをデリゲート クラスとして使用し、AppDelegate を使用してロケーションを更新しています。2 つのケースで位置情報が必要です。1 つは彼が最初に私のアプリケーションにサインインしたとき、もう 1 つはバックグラウンドから来たときです。私はUILocation最初のケースでこのように使用しています:

    locationController = [[UILocation alloc] init];
    locationController.delegate = self;
    locationController.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationController.locationManager.distanceFilter = kCLDistanceFilterNone;
    [locationController.locationManager startUpdatingLocation]; 

2番目のケースでは、単純に:

[locationController.locationManager startUpdatingLocation]

私のデリゲートメソッドで:

- (void)locationUpdate:(CLLocation *)location

私のデリゲートクラスでは、これを行っています:

[locationController.locationManager stopUpdatingLocation]; 

緯度と経度を取った後。ただし、これを呼び出した後も更新されます。

私は試した

    locationController.locationManager=nil;
    locationController.locationManager.delegate=nil

更新を停止した後。しかし、この後 startUpdateLocation を呼び出すと、デリゲート メソッドは呼び出されません。誰かが私が間違っていることを指摘できますか?

4

1 に答える 1

0

問題は、おそらく提供した他のコードにはありません。2 回初期化する可能性があります。このようにして、メッセージを受信しないため、更新を続けるlocationControllera をリークします。これを理解するには、デバッガを使用する必要があります。また、コードの重要なポイントにログ メッセージを配置することも非常に役立ちます。CLLocationManagerstopUpdatingLocation

このような二重の初期化を回避するには、そのような値の割り当てがinitメソッド内でのみ発生していることを確認してください。

于 2013-08-12T11:54:48.330 に答える