1

ユーザーが場所を設定してから領域を作成し、ユーザーが領域を出たり入ったりしたかどうかを監視できるようにします。また、選択した場所からのユーザーの距離を常に監視しています。region monitoring が呼び出され、距離は正しく更新されますが、enter と exit は呼び出されません。これは 30 メートルまで進んだことを示していますが、さらに進んでも同じ結果が得られました。

-(void)setPlugLocation:(CLLocation *)plugLocation{
if (!_plugLocation) {
    _plugLocation=plugLocation;
    if(!regionManager) regionManager = [[CLLocationManager alloc] init];
    [regionManager setDelegate:self];

    CLLocationCoordinate2D plug2D;
    plug2D.latitude=plugLocation.coordinate.latitude;
    plug2D.longitude=plugLocation.coordinate.longitude;
    CLRegion *plugHome = [[CLRegion alloc] 
                            initCircularRegionWithCenter:plug2D 
                            radius:20 
                            identifier:@"Your Plug"];
    [regionManager startMonitoringForRegion:plugHome desiredAccuracy:kCLLocationAccuracyBest];
}
}

debug output:
2012-05-25 21:28:29.921 TestLocation[4412:707]  locationManager didUpdateToLocation
2012-05-25 21:28:29.929 TestLocation[4412:707] Distance from plug=0.000000
2012-05-25 21:28:30.700 TestLocation[4412:707]  locationManager didUpdateToLocation
2012-05-25 21:28:30.704 TestLocation[4412:707] Distance from plug=9.897339
2012-05-25 21:28:33.106 TestLocation[4412:707] Distance from plug=15.923317
2012-05-25 21:28:34.783 TestLocation[4412:707] region monitoring started
(identifier Your Plug) <+47.61713686,-122.28694184> radius 20.00m
2012-05-25 21:28:34.784 TestLocation[4412:707] region monitoring started
(identifier Your Plug) <+47.61713686,-122.28694184> radius 20.00m
2012-05-25 21:28:34.788 TestLocation[4412:707] Distance from plug=19.705339
2012-05-25 21:28:56.894 TestLocation[4412:707] Distance from plug=12.808387
2012-05-25 21:28:57.894 TestLocation[4412:707] Distance from plug=12.808387
2012-05-25 21:29:05.893 TestLocation[4412:707] Distance from plug=12.808387
2012-05-25 21:29:19.890 TestLocation[4412:707] Distance from plug=12.808387
2012-05-25 21:30:02.892 TestLocation[4412:707] Distance from plug=14.614380
2012-05-25 21:30:32.893 TestLocation[4412:707] Distance from plug=14.614380
2012-05-25 21:30:52.891 TestLocation[4412:707] Distance from plug=15.352976
2012-05-25 21:32:41.898 TestLocation[4412:707] Distance from plug=7.644082
2012-05-25 21:32:43.891 TestLocation[4412:707] Distance from plug=12.354503
2012-05-25 21:32:49.068 TestLocation[4412:707] Distance from plug=15.757565
2012-05-25 21:32:52.984 TestLocation[4412:707] Distance from plug=21.126129
2012-05-25 21:32:56.880 TestLocation[4412:707] Distance from plug=26.952410
2012-05-25 21:33:04.925 TestLocation[4412:707] Distance from plug=31.824801
4

1 に答える 1

0

正しい領域監視コールバック メソッドを実装していますか?

-didEnterRegion
-didExitRegion

地域の監視に関する情報。あなたが思っているほど正確ではありません。追加される最小領域サイズがあります。最小サイズは 100M です。したがって、100M 未満で追加したものはすべて、100M まで増加します。

出力で場所の更新を取得しているように見えるので、地域の監視を処理するには CLLocationManagerDelegate メソッドを実装するだけでよいと思います。リージョンが正しく追加されていることを監視することもできます。コールバックが発生しないエラーが発生する可能性があります。

-monitoringDidFailForRegion

お役に立てれば。

于 2012-07-09T18:44:00.553 に答える