1

これは、このサイトでの最初の質問です。

私はこの深刻な問題を抱えています....これを最初から説明します...

私のアプリでは、ユーザーがアプリケーションのボタンをクリックしたときにユーザーの現在の場所を取得する必要があります..しかし問題は、ボタンをクリックすると現在の場所に更新されず、以前の場所を取得することです。しかし、iPhoneアプリで場所の警告をリセットすると、正しい場所が取得されます。

このアプリケーションがユーザーの現在の場所を取得するために行ったコード手順は次のとおりです...

まずはアプリにインポートして……

次に、アプリケーションを介してアクセスする必要があるため、グローバルファイルを使用してアプリケーションのデータを保持しています。

だから私がgloble.mと.hファイルでやったことは...

CLLocationManager* locationManager;

@synthesize locationManager


+ (Globals*)sharedGlobals {
    @synchronized(self) {
        if(_sharedGlobals == nil) {
            _sharedGlobals = [[super allocWithZone:NULL] init];


   _sharedGlobals.locationManager = [[CLLocationManager alloc]init];
   [_sharedGlobals.locationManager   setDesiredAccuracy:kCLLocationAccuracyBest];

        }
    }

    return _sharedGlobals;
}

次に、他のView ControllerでCLLocationManagerDelegateを.mファイルに入れました

-(IBAction) didTapSearchbtn{

    if (![CLLocationManager locationServicesEnabled]) {


    }else {

        [[Globals sharedGlobals].geoLocations removeAllObjects];
        search.text = nil;
        [Globals sharedGlobals].fromTextField = NO;

        [[Globals sharedGlobals].locationManager setDelegate:self];
        [[Globals sharedGlobals].locationManager startUpdatingLocation];


    }


}


- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

    if (newLocation.horizontalAccuracy < 0) return; 

    [[Globals sharedGlobals].locationManager setDelegate:nil];
    [[Globals sharedGlobals].locationManager stopUpdatingLocation];

    [[Globals sharedGlobals].geoLocations setObject:[[NSString alloc] initWithFormat:@"%f", newLocation.coordinate.latitude] forKey:@"geolat"];
    [[Globals sharedGlobals].geoLocations setObject:[[NSString alloc] initWithFormat:@"%f", newLocation.coordinate.longitude] forKey:@"geolong"];

    [self retriveDataFromInternet];

    [[Globals sharedGlobals].locationManager release];

}


- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
    //GPS error

    [[Globals sharedGlobals].locationManager setDelegate:nil];
    [[Globals sharedGlobals].locationManager stopUpdatingLocation];


    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"YumTable!", nil) message:NSLocalizedString(@"Enable Your GPS settings to get your current location", nil) delegate:nil cancelButtonTitle:NSLocalizedString(@"Ok", nil) otherButtonTitles:nil];
    [alert show];
    [alert release];

    [[Globals sharedGlobals].locationManager release];
}

ビューコントローラーにラベルを付けて、緯度と経度を取得するために別の場所に移動しました..しかし、常に同じ緯度と経度を取得しています...しかし、場所の警告をリセットしてアプリを再度実行すると、正しい緯度と経度が取得されました。 ..そのため、常に現在の場所を取得する必要がある場合は、リセットする必要があります。しかし、検索ボタンをクリックするたびに現在地を取得する必要があります...

誰かがこのコードで何が間違っているかを言うことができますか、そして誰かが私を助けることができます....

また、私の下手な英語については非常に申し訳ありません... :)

4

2 に答える 2

1

LocationManager は、可能な限り高速になるように試み、この場所で十分であると判断するため、以前の場所を返します。通常、新しい場所のタイムスタンプをチェックして、新しい場所であることを確認します。古すぎる場合は、マネージャーを止めずに次のマネージャーを待ちます。

Apple が提供するサンプル コードを参照することをお勧めします

このコードは、例からコピーされます。

- (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;
}
于 2011-04-27T14:55:22.483 に答える
0

コードを入力し忘れました...アプリケーションが完全に機能し始めたことを理解した後...皆さん、ありがとうございました。

[_sharedGlobals.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

その代わりに私は使用しました

[_sharedGlobals.locationManager setDesiredAccuracy:kCLLocationAccuracyBestforNavigation];

于 2011-05-23T09:31:19.417 に答える