2012-04-18 49 views
0

我显示alertViews时位置经理无法找到当前位置。我做了这样的的LocationManager didFailWithError一再呼吁

- (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方法反复地调用。所以我的警报观点反复显示。

我该如何解决这个问题?

回答

1

一个良好的开端,可以通过正在进行的后台进程触发错误信息 - 如位置管理器 - 是存储参考UIAlertView。当代理接收alertView:clickedButtonAtIndex:,该参考文献重置为nil。在显示新错误之前,请检查一个是否已经可见。

更妙的是,不显示从后台进程模式的错误消息。只是四处走动,你偶尔会失去接待,而当这种情况发生时必须解决错误是很繁琐的。如果您的应用程序有一个配置或帮助屏幕,包括从位置管理器最近的错误消息有一个空格(或游戏中心,或iCloud的,或其他任何东西,偶尔会失去连接。)

4

苹果文档指出:

如果位置服务无法检索位置向右走, 它报告kCLErrorLocationUnknown错误,不停地尝试。在这种情况下,您可以简单地忽略错误并等待新事件。

如果用户拒绝你的应用程序使用位置服务, 这个方法报告一个kCLErrorDenied错误。收到此类 错误后,应停止位置服务。

因此,您可能会跳过一些停止更新并显示警报的情况,尤其是默认情况。