2012-04-18 6 views
0

と呼ばれます。このlocationManager didFailWithErrorを繰り返したときに現在の場所を見つけることがロケーションマネージャができない私は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メソッドが繰り返し呼び出されるであるように私はそれをやりました。だから私のalertviewsが繰り返し表示されます。

どうすればこの問題を解決できますか?

答えて

1

進行中のバックグラウンド・プロセスによってトリガすることができるエラーメッセージのための良好な開始 - 位置管理などは - UIAlertViewへの参照を格納することです。デリゲートがalertView:clickedButtonAtIndex:を受け取ったら、この参照をnilにリセットします。新しいエラーを表示する前に、すでに表示されているかどうかを確認してください。

さらに良いことに、バックグラウンド・プロセスからのモーダルエラーメッセージが表示されません。ちょうど周りを歩いて、あなたは時々受信を失うでしょう、そして、それが起こるときにエラーを却下しなければならないのは面倒です。アプリに設定画面やヘルプ画面がある場合は、Location Manager(またはゲームセンター、iCloudなどの最新のエラーメッセージ、または時折接続を失うもの)のためにスペースを入れてください。

4

アップルのドキュメントは述べて:

ロケーションサービスは、すぐに場所を取得することができない場合は、 それはkCLErrorLocationUnknownエラーを報告し、しようとし続けています。このような状況では、単にエラーを無視して新しいイベントを待つだけで済みます。

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

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

関連する問題