9

元の距離クランチ ロジックの代わりにレイ キャスティング ロジックを使用するようにCLRegionオーバーライドして、ポリゴンをサポートするために a をサブクラス化しました。containsCoordinate:サブクラスは通常のメソッド ( initCircularRegionWithCenter:radius:identifier:) によって初期化され、次にs がs として可変配列にCLLocationCoordinate2d追加されます。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 のサブクラス化は可能ですか?

4

7 に答える 7

20

私は自分自身の質問に答えたくないのですが、問題の解決策を見つけました。5のコード/エラーは、20 を超えて監視kCLErrorDomainしようとしたことを示します。私の場合、両方のサブクラスが 20 を超える地域を監視していました。 CLRegions

于 2013-07-19T03:13:27.083 に答える
11

次の場合にも発生します。

地域の監視を停止する

[self.manager stopMonitoringForRegion:region];

その後すぐに、監視対象のすべてのリージョンの状態をリクエストします。

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

IOS はその領域の監視を無効にしているように見えますが、monitoredRegions 配列からまだ削除していないため、kCLErrorDomain 5 を取得します。

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];
    }
}
于 2014-06-04T08:38:03.380 に答える
3

緯度と経度の値が意味をなさない場合にも、このエラー コードが返される可能性があります。(たとえば、私はそれらを転置し、しばらくの間このエラーに悩まされていました。)

于 2013-08-07T17:20:45.560 に答える
2

このエラーは、追加された場合にも発生する可能性がありCLRegionますnil

于 2013-11-08T12:53:30.527 に答える