iOS 6 and Location Services not working

杀马特。学长 韩版系。学妹 提交于 2019-11-28 08:43:40

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

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.

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.

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

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

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

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.

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!