1

ジオフェンスを作成し、CLLocationManager と startMonitoringForRegion: を使用して監視しようとしています。問題は、デリゲートが呼び出されないだけでなく (はい、すべてのメソッドを実装しました)、リージョンが [locationManager moniteredRegions] セットに格納されていないことです。以下のコードを実行した後のログには、次のように表示されます。

2012-07-31 13:46:54.208 GeofencingTest[2357:f803] 作成された領域:

はい - regionMonitoringEnabled と regionMonitoringAvailable を確認しました。いいえ - デバイスでこれを試したことはありません。シミュレーターのみです。はい - [locationManager startUpdatingLocation] と CLLocation *location = locationManager.location; を実行することで、CLLocationManager からロケーションの更新を取得できます。

助けてください!:)

LocationDelegate.m

- (void) createGeofence:(NSString *)identifier withCenter:(CLLocationCoordinate2D)center withRadius:(CLLocationDistance) radius{
   if ([CLLocationManager regionMonitoringEnabled] && [CLLocationManager regionMonitoringAvailable]){
       CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:center radius:radius identifier:identifier];
       NSLog(@"should be succesful");
       [locationManager startMonitoringForRegion:region];
   }

   NSLog(@"Created regions:");
   for (CLRegion *my_region in [locationManager monitoredRegions]){
       NSLog(@"    Region: %@", my_region.identifier);
   }    
}
- (id) init{
   self = [super init];
   if (self){
      locationManager = [[CLLocationManager alloc] init];
      locationManager.delegate = self;
      locationManager.desiredAccuracy = kCLLocationAccuracyBest;
   }
   return self;
}

SomeOtherClass.m

- (IBAction)createGeofence:(UIButton *)sender{



   float latitude = [latitudeField.text floatValue];
   float longitude = [longitudeField.text floatValue];
   CLLocationDistance radius = [radiusField.text floatValue];

   CLLocationAccuracy desiredAccuracy = [self getAccuracyConvertedToMeters];

   [self.locationManagerObject createGeofence:identifierField.text
                                   withCenter:CLLocationCoordinate2DMake(latitude, longitude) 
                                   withRadius:radius
                                 withAccuracy:desiredAccuracy];

}

4

1 に答える 1

0

作成された領域をログに記録するとき、その領域がまだ監視されていない可能性があります。リージョン モニタリングのデリゲート メソッドを呼び出して、そこでモニタリングされているリージョンを探す必要があると思います。

- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
    NSLog(@"Start monitoring for region: %@", region.identifier);
    for (CLRegion *my_region in [manager monitoredRegions]){
        NSLog(@"Region: %@", my_region.identifier);
    }
}

- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error {
    NSLog(@"Error: %@", error);
}
于 2013-05-18T10:14:08.100 に答える