1

locationManagerを次のように初期化します。

if (!self.locManager) 
{
    self.locManager = [[CLLocationManager alloc] init];
    self.locManager.delegate = self;
    [locManager startMonitoringSignificantLocationChanges];
}

デバイスが動いておらず、毎回「didUpdateToLocation」が呼び出されています。何が問題になる可能性がありますか?ありがとう

4

2 に答える 2

3

didUpdateToLocationさまざまな理由で更新される可能性があります。これを処理するための適切な戦略は、タイムスタンプに基づいて結果を徐々にフィルタリングし、次に必要な精度にすることです。

Apple は、LocateMe サンプル アプリで良い例を提供しています。

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    // test the age of the location measurement to determine if the measurement is cached
    // in most cases you will not want to rely on cached measurements
    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    if (locationAge > 5.0) return;

    // test that the horizontal accuracy does not indicate an invalid measurement
    if (newLocation.horizontalAccuracy < 0) return;

    // test the measurement to see if it is more accurate than the previous measurement
    if (self.bestEffortAtLocation == nil || self.bestEffortAtLocation.horizontalAccuracy > newLocation.horizontalAccuracy)
    {
        // store the location as the "best effort"
        self.bestEffortAtLocation = newLocation;

        // test the measurement to see if it meets the desired accuracy
        //
        // IMPORTANT!!! kCLLocationAccuracyBest should not be used for comparison with location coordinate or altitidue 
        // accuracy because it is a negative value. Instead, compare against some predetermined "real" measure of 
        // acceptable accuracy, or depend on the timeout to stop updating. This sample depends on the timeout.
        //
        if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {
            // we have a measurement that meets our requirements, so we can stop updating the location
            // 
            // IMPORTANT!!! Minimize power usage by stopping the location manager as soon as possible.
            //
            [self stopUpdatingLocation:NSLocalizedString(@"Acquired Location", @"Acquired Location")];
        }
    }
}
于 2012-10-11T21:28:21.347 に答える
0

場所の違いをチェックしていますか?CoreLocationは、精度、進行方向、速度などの他の属性が変更されたときにもコールバックを呼び出します

startMonitoringSignificantLocationChanges最初の修正を行う必要があり、その後、「重要な変更」(セルタワーの変更など)のコールバックを受け取ります。

于 2012-10-07T20:42:38.843 に答える