CoreLocation kCLErrorDomain错误5

时间:2013-07-18 21:06:59

标签: objective-c cocoa-touch core-location clregion

我通过覆盖CLRegioncontainsCoordinate:子类化为支持多边形,以使用光线投射逻辑而不是原始距离运算逻辑。通过常规方法(initCircularRegionWithCenter:radius:identifier:)初始化子类,然后将CLLocationCoordinate2d s作为NSValue添加到可变数组中。这些坐标在光线投射逻辑中使用。

当我尝试使用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.)"

我还尝试了一个不同的子类,它不修改任何方法,但添加了一个从NSDictionary读取元数据的方法。我遇到了同样的错误。

发生了什么事?子类化CLRegion是否可行?

7 个答案:

答案 0 :(得分:18)

我讨厌回答我自己的问题,但我找到了解决问题的方法。 kCLErrorDomain代码/错误5表示您已尝试监控超过20 CLRegions。就我而言,两个子类都监控超过20个地区。

答案 1 :(得分:10)

如果您:

也会发生

停止监控某个地区

[self.manager stopMonitoringForRegion:region];

并在不久之后请求所有受监控区域的州:

for (CLRegion *region in self.manager.monitoredRegions) {
    [self.manager requestStateForRegion:region];
}

您将获得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)

要解决这个问题,请执行以下操作:

- (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];
    }
}

答案 2 :(得分:7)

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

答案 3 :(得分:3)

当您的纬度和经度值没有意义时,也可以返回此错误代码。 (例如,我将它们转换成了一段时间,并被这个错误所困扰。)

答案 4 :(得分:2)

如果添加CLRegionnil,则此错误也会上升。

答案 5 :(得分:0)

如果有人还在努力解决这个问题,请看看这里:

在我的情况下,我必须在致电requestAlwaysAuthorization之前致电startMonitoring,它就像魅力一样!

locationManager.requestAlwaysAuthorization()

let currRegion = CLCircularRegion(center: CLLocationCoordinate2D(latitude: LAT, longitude: LONG, radius: 100, identifier: "MyLocation")
currRegion.notifyOnEntry = true

locationManager.startMonitoring(for: region)

顺便说一句,我很想感谢https://shrikar.com/swift-tutorial-corelocation-and-region-monitoring-in-ios-8/

答案 6 :(得分:0)

我收到此错误,因为我没有启动蓝牙。 所以...别忘了启动蓝牙;)