特に位置情報に基づくアプリを構築しているため、ユーザーに経度と緯度を座標させ、それを機能させる必要があります。
CLLocationManager
ここで、デリゲートを使用して事前定義した地域にユーザーが入るかどうかを知る必要があるため、ユーザーがその地域に入るかどうかを知るステートメントでオーバーライドdidEnterRegion
します。NSLog
の
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
を呼び出しますが、やのデリゲートのようなデリゲートではstartMonitoringForRegion:
何も起こりません。didEnterRegion
monitoringDidFailForRegion
CLRegion
これが私のコードの一部です:
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
locLongittude=newLocation.coordinate.longitude;
locLattiude=newLocation.coordinate.latitude;
self.regionTimer=[NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(monitorRegion) userInfo:nil repeats:NO];
}
-(void)startMonitor:(float)latitude longitude:(float)longitude radius:(float)radius
{
CLLocationCoordinate2D home;
home.latitude = latitude;
home.longitude = longitude;
CLRegion* region = [[CLRegion alloc] initCircularRegionWithCenter:home radius:radius identifier:@"home"];
if([CLLocationManager regionMonitoringEnabled] && [CLLocationManager regionMonitoringAvailable])
[locManager startMonitoringForRegion:region desiredAccuracy:kCLLocationAccuracyBest];
NSLog(@"Count: %d region aval %d enable %d",[[locManager monitoredRegions]count], [CLLocationManager regionMonitoringAvailable],[CLLocationManager regionMonitoringEnabled]);
for( CLRegion* region in locManager.monitoredRegions )
NSLog( @"%@", region );
}
-(void)monitorRegion
{
[self startMonitor:31.971160 longitude:35.832465 radius:10000.0];
}
編集:シミュレーターを使用して行われたすべてのテストと、Product-> Debug -> Simulate Location を使用して場所をシミュレートします
わかりました、それはうまくいきます。上記のコードはうまく機能します。問題は、didEnterRegion
メソッドが呼び出されるようにすることは、入力する必要がある領域の外にあることであり、それを機能させるために入力することです。
私が行っていたのは、シミュレーションでは常に、入力する必要がある領域内の座標を選択することでした。これが、領域外でなければならないという問題でした。
だからここにあなたと共有する私のコードがあります
更新: リージョンを離れるときに didExitRegion が呼び出されないのはなぜですか?