我无法获得最简单的位置更新代码。我有一个位置应用程序,运行良好超过一年,现在当我尝试编译并运行它(升级到xcode 6.1后,没有更改代码),在调用startUpdatingLocation后,didUpdateLocations回调永远不会触发,我可以看到gps指示器永远不会出现在电池指示器旁边。 我已经启动了一个新的测试项目,除了尝试注册位置更新之外什么也没做,但结果仍然相同:设备或模拟器上没有位置更新。 以下是测试项目的单视图控制器的代码:
//ViewController.h
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
@interface ViewController : UIViewController <CLLocationManagerDelegate>
{
}
@property (strong, nonatomic) CLLocationManager* locationManager;
@end
//ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.locationManager = [[CLLocationManager alloc]init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[self.locationManager requestWhenInUseAuthorization];
[self.locationManager startUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
NSLog(@"got a location");
}
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"Error: %@",error.description);
}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
NSLog(@"got a location");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
如果拥有最新版xcode的人可以创建这样的项目,除了接收位置更新,验证它是否有效以及完整地发布代码之外,那将是非常棒的。我已尝试在plist文件中添加内容以及所有其他类似问题的补救措施,但无济于事。
答案 0 :(得分:1)
是的,新版本中的一些内容已经发生了变化,这可能会令人头疼。我遇到了同样的问题,这是为我here解决它的线程。
您需要添加以下行info.plist:
<key>NSLocationWhenInUseUsageDescription</key>
<string>The spirit of stack overflow is coders helping coders</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>I have learned more on stack overflow than anything else</string>
请确保在尝试更新用户位置之前致电[CLLocationManager requestWhenInUseAuthorization]
或[CLLocationManager requestAlwaysAuthorization]
。