iPhone设备中的位置问题

时间:2015-02-17 05:59:57

标签: ios objective-c iphone ios7 ios8

我想检测用户在我的应用中的当前位置。我正在使用目标c。它在模拟器中工作正常,但在设备上测试时出现错误。

didFailWithError: Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)"

请帮我解决这个问题。我使用Lat long值在我的应用程序中查找地标。

  if(version<8.0)
{
    locationManager = [[CLLocationManager alloc] init];


    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];
}
else
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    // Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7.
    if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [locationManager requestWhenInUseAuthorization];
    }
    [locationManager startUpdatingLocation];
}

这是委托方法

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
NSLog(@"didFailWithError: %@", error);
UIAlertView *errorAlert = [[UIAlertView alloc]
                           initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];}



- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
NSLog(@"didUpdateToLocation: %@", newLocation);
CLLocation *currentLocation = newLocation;


if (currentLocation != nil) {
    NSString *longitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
    NSString *latitude = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];

    CLGeocoder * geoCoder = [[CLGeocoder alloc] init];



    [geoCoder reverseGeocodeLocation: locationManager.location completionHandler:
     ^(NSArray *placemarks, NSError *error) {


         CLPlacemark *placemark = [placemarks objectAtIndex:0];


         NSString *placemark_str = [placemark locality];
         subAdminArea.text=placemark.subAdministrativeArea;

         NSString *are_str = [placemark subLocality];

            subAdminArea.text=placemark.subAdministrativeArea;


         NSString *location_str=[NSString stringWithFormat:@"%@,%@",are_str,placemark_str];

         [[NSUserDefaults standardUserDefaults]setValue:location_str forKey:@"Location"];

         NSLog(@"place mark str: %@",placemark_str);


     }];

}}


- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
NSLog(@"%@", [locations lastObject]);

CLGeocoder * geoCoder = [[CLGeocoder alloc] init];


[geoCoder reverseGeocodeLocation: [locations lastObject] completionHandler:
 ^(NSArray *placemarks, NSError *error) {


     CLPlacemark *placemark = [placemarks objectAtIndex:0];


     NSString *placemark_str = [placemark locality];
     NSString *are_str = [placemark subLocality];



     NSString *location_str=[NSString stringWithFormat:@"%@,%@",are_str,placemark_str];

     [[NSUserDefaults standardUserDefaults]setValue:location_str forKey:@"Location"];




 }];}




- (void)requestAlwaysAuthorization{
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

// If the status is denied or only granted for when in use, display an alert
if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusDenied) {
    NSString *title;
    title = (status == kCLAuthorizationStatusDenied) ? @"Location services are off" : @"Background location is not enabled";
    NSString *message = @"To use background location you must turn on 'Always' in the Location Services Settings";

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title
                                                        message:message
                                                       delegate:self
                                              cancelButtonTitle:@"Cancel"
                                              otherButtonTitles:@"Settings", nil];
    [alertView show];
}
// The user has not enabled any location services. Request background authorization.
else if (status == kCLAuthorizationStatusNotDetermined) {
    [locationManager requestAlwaysAuthorization];
}}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{
if (buttonIndex == 1) {
    // Send the user to the Settings for this app
    NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    [[UIApplication sharedApplication] openURL:settingsURL];
}}

我还使用NSLocationAlwaysUsageDescription-&gt; String&amp;更新我的plist文件。 NSLocationWhenInUseUsageDescription - &gt;字符串。

谢谢。

1 个答案:

答案 0 :(得分:-1)

1)检查您确实拥有有效的WiFi和3G连接

如果你这样做

2)转到设置并重置您的位置服务

3)然后重置您的网络设置