2

特に位置情報に基づくアプリを構築しているため、ユーザーに経度と緯度を座標させ、それを機能させる必要があります。

CLLocationManagerここで、デリゲートを使用して事前定義した地域にユーザーが入るかどうかを知る必要があるため、ユーザーがその地域に入るかどうかを知るステートメントでオーバーライドdidEnterRegionします。NSLog

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

を呼び出しますが、やのデリゲートのようなデリゲートではstartMonitoringForRegion:何も起こりません。didEnterRegionmonitoringDidFailForRegionCLRegion

これが私のコードの一部です:

   -(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 が呼び出されないのはなぜですか?

4

1 に答える 1

0

私自身の経験によると、領域監視はセル変更イベントに依存しているようです (なぜ Apple はこのように設計したのでしょうか? バッテリー寿命を延ばすためだと思います)。したがって、この実装は理想的ではありません。

理想的には、境界を越えるたびに動作するはずですが、iPhone では同じように動作しません。組み込みのリマインダー アプリを使用しても、位置情報に基づくリマインダーによって、近くにあると失敗することがあります。

したがって、あなたの場合、セル変更イベントは発生せず、なぜ didExitRegion が呼び出されないと思います。startMonitoringSignificantLocationChanges を使用して再確認できます。

于 2013-07-31T11:50:05.707 に答える