Nat*_*mer 8 cocoa-touch objective-c core-location clregion
我CLRegion通过覆盖containsCoordinate:使用光线投射逻辑而不是原始距离运算逻辑来继承a 支持多边形.通过普通方法(initCircularRegionWithCenter:radius:identifier:)初始化子类,然后将CLLocationCoordinate2ds作为NSValues 添加到可变数组中.在光线投射逻辑期间使用这些坐标.
一旦我尝试使用CLRegion子类,我面临着应用程序逻辑中的大量错误,以及以下错误:
2013-07-18 16:46:44.515 Geofencing[4816:907] (identifier 6C11CBAF-3EE4-4257-9D75-9724F4349B5D) <+39.86605072,-75.54420471> radius 186.54m: Error Domain=kCLErrorDomain Code=5 "The operation couldn’t be completed. (kCLErrorDomain error 5.)"
Run Code Online (Sandbox Code Playgroud)
我还尝试了一个不同的子类,它不修改任何方法,但添加了一个从NSDictionary读取元数据的方法.我遇到了同样的错误.
到底是怎么回事?子类化CLRegion是否可行?
Nat*_*mer 18
我讨厌回答我自己的问题,但我找到了解决问题的方法.一个kCLErrorDomain的5代码/错误表示你试图监控超过20 CLRegions.就我而言,两个子类都监控了20多个地区.
小智 10
如果您:
停止监视一个地区
[self.manager stopMonitoringForRegion:region];
Run Code Online (Sandbox Code Playgroud)
不久之后,请求所有受监控地区的州:
for (CLRegion *region in self.manager.monitoredRegions) {
[self.manager requestStateForRegion:region];
}
Run Code Online (Sandbox Code Playgroud)
您将获得kCLErrorDomain 5,因为IOS似乎已禁用该区域的监视,但尚未从monitoredRegions数组中删除它
monitoringDidFailForRegion CLCircularRegion (identifier:'Home', center:<...>, radius:102.00m) The operation couldn’t be completed. (kCLErrorDomain error 5.)
monitoredRegion: CLCircularRegion (identifier:'Home', center:<...>, radius:102.00m)
monitoredRegion: CLBeaconRegion (identifier:'BeaconHome', uuid:<..., major:(null), minor:(null))
monitoredRegion: CLCircularRegion (identifier:'D...', center:<...>, radius:101.00m)
monitoredRegion: CLCircularRegion (identifier:'W...', center:<..>, radius:51.00m)
Run Code Online (Sandbox Code Playgroud)
要解决这个问题,请执行以下操作:
- (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{
NSLog(@"monitoringDidFailForRegion %@ %@",region, error.localizedDescription);
for (CLRegion *monitoredRegion in manager.monitoredRegions) {
NSLog(@"monitoredRegion: %@", monitoredRegion);
}
if ((error.domain != kCLErrorDomain || error.code != 5) &&
[manager.monitoredRegions containsObject:region]) {
NSString *message = [NSString stringWithFormat:@"%@ %@",
region, error.localizedDescription];
[AlertView alert:@"monitoringDidFailForRegion" message:message];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11424 次 |
| 最近记录: |