5

延期された位置情報の更新の新しいiOS6機能を使用しようとしていますが、このエラーが発生し続けます:

didFinishDeferredUpdatesWithError:Error Domain = kCLErrorDomain Code = 11 "操作を完了できませんでした。(kCLErrorDomainエラー11.)"

私は次のコードを使用しています:

- (DeviceAPI *) init
    {
     locationManager = [[CLLocationManager alloc] init];
     [locationManager setDelegate:self];
     [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
     [locationManager startUpdatingLocation];
     [locationManager allowDeferredLocationUpdatesUntilTraveled:(CLLocationDistance)100000     timeout:(NSTimeInterval)100000];

    return self;
 }

そしてこのcallback関数:

- (void)locationManager:    (CLLocationManager *)   manager
                        didFinishDeferredUpdatesWithError:(NSError *)error
{
    NSLog(@"didFinishDeferredUpdatesWithError :%@", [error description]);
}

何か助けはありますか?

4

5 に答える 5

8

iOS 6.0 SDK の Apple Developer Forums によると、延期された位置情報の更新は次の場合にのみ利用できます。

  • iPhone 5 ハードウェア
  • iOS 6.0 以降を実行している
  • これにはGPS チップが必要なため、目的の精度をkCLLocationAccuracyBestまたはに設定します。セルラー データのない iPad には GPS チップがありません。kCLLocationAccuracyBestForNavigation
  • 「startUpdatingLocation」メソッドを呼び出します
  • 1 秒あたり約 1 回の位置情報の更新を待ちます
  • その後、更新の延期を開始します

参照: https://devforums.apple.com/message/751974#751974

ドキュメントを参照してください:allowDeferredLocationUpdates(untilTraveled:timeout:)

つまり、iPhone 5 ハードウェアが必要で、位置情報の更新が 1Hz で届くのを待つ必要があるようです。

locationManager:didUpdateLocations:さらに、別のポスターが述べたように、デリゲートにメソッドを実装する必要があります。

この [ allowDeferredLocationUpdates] メソッドを呼び出す最も一般的な場所は、デリゲートの locationManager(_:didUpdateLocations:)メソッドです。新しい場所を処理した後、距離または時間の基準が満たされるまで将来の更新を延期する場合は、このメソッドを呼び出します。新しいイベントが到着し、アプリがバックグラウンドにある場合、イベントはキャッシュされ、配信は適切に延期されます。

ドキュメントから。内にメモを追加しました[]

于 2013-01-24T19:33:53.880 に答える
0

allowDeferredLocationUpdatesUntilTraveled:timeout: を呼び出す前に、距離フィルターを kCLDistanceFilterNone に設定すると、機能します。

于 2015-07-08T19:58:08.517 に答える
0

私のテストでは、遅延更新は iOS 6.0.1 以降でのみ機能し、6.0 では機能しないことがわかりました。私は 2 台の電話でテストしました。これがシミュレーターが機能しない理由だと思います。携帯電話がまだ更新されていない場合は、それも機能していない可能性があります。

また、必ず実装してください

– locationManager:didUpdateLocations:

現在廃止されているのではなく

– locationManager:didUpdateToLocation:fromLocation:

延期されたロケーション更新で使用するために必要なためです。

于 2012-12-28T00:30:41.177 に答える
0

info.plist UIBackgroundModes フィールドに場所を設定しましたか?

于 2012-10-30T18:14:55.273 に答える
-1

[CLRegion initCircularRegionWithCenter] 呼び出しの 1 つのフレームワーク サンプルでこの説明を見つけました。

「オーバーレイの半径が大きすぎる場合、登録は自動的に失敗するため、半径を最大値にクランプします。」

于 2013-05-22T20:27:00.650 に答える