0

ロケーションマネージャーが現在の場所を見つけることができない場合、alertViewsを表示しています。こんな感じでした

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {

[manager stopUpdatingLocation];

switch([error code])
{
    case kCLErrorNetwork: // general, network-related error
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please check your network connection or that you are not in airplane mode" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }
        break;
    case kCLErrorDenied:{
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"User has denied to use current Location " delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }
        break;
    default:
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Unknown network error" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
        [alert show];
        [alert release];
    }
        break;
}

}

私の問題は、locationManagerのdidFailWithErrorメソッドが繰り返し呼び出されることです。そのため、アラートビューが繰り返し表示されます。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

5

Appleのドキュメントには次のように記載されています。

位置情報サービスが位置情報をすぐに取得できない場合、kCLErrorLocationUnknownエラーを報告し、試行を続けます。このような状況では、エラーを無視して新しいイベントを待つことができます。

ユーザーがアプリケーションによる位置情報サービスの使用を拒否した場合、このメソッドはkCLErrorDeniedエラーを報告します。このようなエラーが発生した場合は、位置情報サービスを停止する必要があります。

そのため、更新を停止してアラートを表示する場合、特にデフォルトの場合をスキップする場合があります。

于 2012-04-18T10:10:09.823 に答える
1

ロケーションマネージャのような進行中のバックグラウンドプロセスによってトリガーされる可能性のあるエラーメッセージの良いスタートは、への参照を保存することUIAlertViewです。デリゲートがを受信したら、alertView:clickedButtonAtIndex:この参照をにリセットしnilます。新しいエラーを表示する前に、エラーがすでに表示されているかどうかを確認してください。

さらに良いことに、バックグラウンドプロセスからのモーダルエラーメッセージを表示しないでください。歩き回るだけで、受信が失われることがあります。その場合、エラーを却下するのは面倒です。アプリに設定画面またはヘルプ画面がある場合は、ロケーションマネージャー(またはGame Center、iCloud、または接続が失われることがあるその他のもの)からの最新のエラーメッセージ用のスペースをそこに含めます。

于 2012-04-18T11:14:47.173 に答える