-1

新しい CLLocation と CLRegion を設定しようとしていますが、実際の場所に関係なく、場所は常に同じ座標で返されます。メインの UIViewController は、カスタム クラスと同様に、CLLocationManagerDelegate プロトコルに準拠しています。カスタム クラスが初期化されると、タイマーが 0.25 秒後に起動するように設定されます。次のコードを使用します。

mainLocationManager = [[CLLocationManager alloc] init];
[mainLocationManager startUpdatingLocation];
location = [mainLocationManager location];
if (![location.timestamp isEqualToDate:[NSDate dateWithTimeIntervalSinceNow:0]]) { //filters cached data by updating location if cached data not recent enough
    location = [mainLocationManager location];
}

//Set up region
region = [[CLRegion alloc] initCircularRegionWithCenter:location.coordinate
                                                     radius:500
                                                 identifier:[NSString stringWithFormat:@"region:%@", locationName]];
NSLog(@"%@       %@", location, region);

座標が常に同じ値であることを除いて、コードは機能しているように見えます。これを変更する方法がわかりません。どんな助けでも大歓迎です、ありがとう!

4

3 に答える 3

1

ロケーション マネージャーは非同期フレームワークです。startUpdatingLocation を呼び出した直後に、ロケーション マネージャーがユーザーの正しいロケーションを取得することを期待することはできません。

ロケーション管理者のデリゲートとして自分自身を設定し、startUpdatingLocation を呼び出してから、locationManager:didUpdateToLocation:fromLocation:メソッドが呼び出されるのを待つ必要があります。実際、取得した位置の更新を確認し、古くて古い位置情報や不正確すぎる位置の更新を拒否する必要があります (最初に位置の更新をオンにすると、最後に GPS がアクティブだったときの更新が最初に取得されます。場合によっては、数時間または数日遅れていることもあります. その場合、GPS が安定して適切な測定値が得られるようになるまで、次の更新はまったく不正確になります.)

于 2014-05-29T10:54:48.447 に答える
0

ロケーションマネージャーデリゲートメソッドでロケーションを更新しなかったためだと思います。

このメソッドで更新場所を取得する

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

{
location_updated = [locations lastObject];    
NSLog(@"updated coordinate are %@",location_updated);

}

また、デバイスでテストします。

于 2014-05-29T11:17:00.363 に答える