我正在开发在iOS5上运行的iPhone应用程序,当我点击按钮调用startMonitoringForRegion:desiredAccuracy:
方法时无法设置地理围栏。
当我打印monitoredRegions
中的区域时,它在模拟器中工作正常,但在实际的iPhone 4上运行时,monitoredRegions
始终为空。预计也不会调用didEnterRegion:
和didExitRegion:
方法。
另一个令人费解的事实是,在模拟器和iPhone 4设备上,也永远不会调用CLLocationManagerDelegate方法didStartMonitoringForRegion:
。
在此感谢您的帮助,谢谢!
编辑: 这是我点击按钮时调用的方法:
-(void) queueGeofence: (CLLocationCoordinate2D)selectedBranch userCoordinate:(CLLocationCoordinate2D)userCoordinate radius: (CLLocationDegrees)radius {
geofence = [[CLRegion alloc] initCircularRegionWithCenter:selectedBranch radius:radius identifier:@"geofence"];
CLLocationAccuracy acc = kCLLocationAccuracyNearestTenMeters;
[locationManager startMonitoringForRegion:geofence desiredAccuracy:acc];
[CLLocationManager regionMonitoringEnabled];
NSLog([CLLocationManager regionMonitoringEnabled] ? @"regionMonitoringEnabled:Yes" : @"regionMonitoringEnabled:No");
NSLog([CLLocationManager regionMonitoringAvailable] ? @"regionMonitoringAvailable:Yes" : @"regionMonitoringAvailable:No");
NSLog(@"LOCATIONMANAGER monitored regions: %@", [locationManager monitoredRegions]});
}
区域监控既启用又可用,但monitoredRegions
仍然没有给我回复。
答案 0 :(得分:3)
如果查看CLLocationManager.h,startMonitoringForRegion:desiredAccuracy:
标题中的注释表明
如果已经为此应用程序监视了具有相同标识符的区域,则为 将从监控中删除。这是异步完成的,可能不会立即反映在monitoredRegions中。
因此,您不应期望[locationManager monitoredRegions]
包含新添加的区域,因为它是异步添加的。
您是否正在为locationManager:monitoringDidFailForRegion:withError:
实施委托方法?也许这会被调用而不是locationManager:didStartMonitoringForRegion:
。另请注意,与现有区域具有相同标识符的区域将被删除,因此您可能会遇到一些意外问题,因为您正在重复使用"geofence"
作为标识符。
答案 1 :(得分:1)
首先,您应确定您的应用有权使用LocationManager
。在分配经理时检查它。
[CLLocationManager authorizationStatus];
启动应用程序并拒绝权限时遇到了同样的问题。删除并重建应用程序后。我有一面旗帜,该用户不接受它。打开它。
答案 2 :(得分:1)
如果您刚刚通过NSLog,它可能无法正常工作。 [locationManager monitoredRegions]返回CLRegions的NSSet。它们不会以这种方式显示在您的日志中。试试这个:
NSSet *setOfRegions = [locationManager monitoredRegions];
for (CLRegion *region in setOfRegions) {
NSLog (@"region info: %@", region);
}