CoreLocation kCLErrorDomain错误5

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多个地区.

  • 看其他答案; 错误代码5并不表示这一点,它似乎是各种错误条件的"全部捕获"代码. (6认同)

小智 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)

  • 围绕谷歌搜索后,我发现这个http://www.cocoanetics.com/2014/05/radar-monitoring-clregion-immediately-after-removing-one-fails/ ..它的工作.. Yayy !!. (2认同)

wsp*_*ijt 7

另外:如果您正在使用iBeacons进行测试,则无法使用iOS模拟器.