CLLocationManager を使用して iOS のリージョンを監視しています。通常の方法でデリゲートを設定します。
self.locationManager = [[[CLLocationManager alloc] init] autorelease];
self.locationManager.delegate = self;
次のようないくつかのデリゲート関数を実装します。
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
NSLog(@"GeoFence: didEnterRegion");
}
- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
NSLog(@"GeoFence: didExitRegion");
}
次に、リージョンの監視を開始します。
CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(lat, lng);
CLRegion *grRegion = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:radius identifier:[NSString stringWithFormat:@"grRegion%i", 1]];
CLLocationAccuracy acc = kCLLocationAccuracyNearestTenMeters;
[self.locationManager startMonitoringForRegion:grRegion desiredAccuracy:acc];
lat (51.116261)、lng (-0.85300)、radius (200) の適切な値を使用します。iPhone 5.1 シミュレーターでアプリをビルドして実行した後、Xcode 4.3 のロケーション インジェクション ツールを使用して、離れた場所と目的の場所の間を移動し、再び戻ります。この手順では、didEnterRegion イベントは正しくトリガーされますが、didExitRegion はトリガーされません。didUpdateToLocation などの他のデリゲート コールバックも受け取ります。シミュレートされた動きのパターンを変更し、Xcode ではなくシミュレーターの位置設定ツールを使用し、iOS 5.1 を搭載した iPhone 4S でアプリを実行して同じテストを試みました。すべてのテストで同じ結果が得られます。
他のスレッドで提案されているようにWiFiが有効になっていることを確認し、関連するトピックに関する他の質問を無駄に調べました. 地域遷移イベントの 1 つが発生し、他のイベントが発生しない理由について何か提案はありますか?