0

私はまだプログラミングにかなり慣れていないので、初心者の質問があります。私のタイプ CLLocationManager の場合、appDelegate.m ファイルにインスタンス変数がある場合、applicationDidFinishLaunching メソッドで CLLocationManager インスタンス変数を割り当てて初期化できると考えました。そして、ボタンを使用して別のメソッドで startUpdatingLocation を呼び出すことができます (別のクラスから呼び出しているため)。これは機能していないようで、startUpdatingLocation と同じメソッドで割り当て/初期化する必要があると考えています。本当?同じメソッドで stopUpdatingLocation する必要がありますか? 私のコードは以下の通りです:

(locationManager is declared as a property)


- (void)stopUpdating {
    [locationManager stopUpdatingLocation];
}

- (double)distanceTraveled {
    return distanceTraveled;
}

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after application launch
    [window addSubview:rootController.view];    
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [window makeKeyAndVisible];
}

- (void)startUpdating {
    [locationManager startUpdatingLocation];
}

次のようにもっとや​​るべきだと思われます:

- (void)startUpdating {
locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}

この 2 番目の方法でそれを行うことになっている場合、CLLocationManager オブジェクトのスコープが、それが含まれるメソッドに対してのみであるためですか? インスタンス変数として使用すると、他のメソッドで使用でき、startUpdatingLocation と stopUpdatingLocation に別のメソッドを使用できると考えました。ありがとう。

4

1 に答える 1

2

あなたが最初に考えたことは正しいです。インスタンス変数がある場合、その変数はオブジェクト (この場合はアプリのデリゲート) の存続期間中ずっと使用できます。

実行していることがうまくいかない場合、それは他の問題が原因です。startUpdating を呼び出すたびに新しい CLLocationManager を割り当てる必要はありません。

于 2010-10-24T15:48:55.443 に答える