-->

iOS 6 and Location Services not working

2019-01-18 00:47发布

问题:

I've updated my iOS SDK to version 6. After that I've compiled my app (works fine in iOS 4 & iOS 5) but now the location services doesn't work. My delegate isn't receiving any update and the upper location arrow is not appearing... I'm starting the service as the usual way:

[locationManager startUpdatingLocation];

My project is non ARC.

What is happening? This is driving me crazy...

Thanks in advance.

回答1:

Make sure you have a CFBundleDisplayName in your project's .plist file. Adding that key fixed it for me.



回答2:

Just set the property pausesLocationUpdatesAutomatically of Location Manager to NO. This is a new feature of IOS 6 that disable Location Updates when application runs in background. The default value of this property is YES.



回答3:

This is a change in iOS6:

You need to implement locationManager:didUpdateLocations: instead of locationManager:didUpdateToLocation:fromLocation to be notified when the location is updated.

You should also read the documentation about startUpdatingLocation.



回答4:

In my case, I had the location manager under a different class and I was calling this class from the main controller. This was not working and the didUpdateLocations was not called.

//
//  LocationServices.h
// 

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@interface LocationServices : NSObject <CLLocationManagerDelegate> {
    CLLocationManager *locationManager;

}

@property (nonatomic, retain) CLLocationManager *locationManager;

- (void)startLocationServices;

@end



//  LocationServices.m
#import "LocationServices.h"

@implementation LocationServices 
@synthesize locationManager, currentLocation;

- (void)startLocationServices {
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.pausesLocationUpdatesAutomatically = NO;
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;

    if ([CLLocationManager locationServicesEnabled]) {
        [locationManager startUpdatingLocation];

    } else {
        NSLog(@"Location services is not enabled");
    }
}

////////////////////////////////////////////////
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations {
    CLLocation* location = [locations lastObject];
    NSLog(@"Updated: latitude %+.6f, longitude %+.6f\n",
          location.coordinate.latitude,
          location.coordinate.longitude);
}
@end

// Main controller
- (void)viewDidLoad {   
    [super viewDidLoad];

.....

LocationServices *locationSerices = [[LocationServices alloc]init];
[locationSerices startLocationServices];
......
}

The above code does not work. Why? I do not know ....you can easily lose interest when you spend so much time trying to do a thing that is supposed to be simple. iOS is very complicated and unfriendly programming environment. There are many ways to do one thing, only one works, you cannot mix and match without introducing a problem. You have to do everything by the book or you or you get nothing. Not even a hint that you did something wrong ... frustrating ...

Instead when I implemented locationManager:(CLLocationManager *)manager didUpdateLocations: in the main controller everything worked fine



回答5:

The issue seems to be resolved in IOS 6.1 Beta2 - http://www.youtube.com/watch?v=aFZR0eMUV74



回答6:

setting CFBundleDisplayName solved the problem for me. Same thing location update was never called, just set the info.plist parameter and it start working.



回答7:

I've tried everything in plist files, cleans, rebuilds, new targets, configurations, etc, etc, etc. Nothing worked. But FINALLY I've fixed it. I had to create a new Xcode 4.5 project from scratch, reconfigure it, add file by file and framework by framework manually. It seems that my old XCode project had something internally incompatible with last XCode. I write this here because maybe it can save someone's next 10 hours of work.



回答8:

Am I being too simplistic here? Under Privacy, Locations looks the same as it did in previous issues.What's all the fuss about?