是否可以直接从appDelegate获取GPS位置ios8

是否可以直接从appDelegate获取GPS位置ios8,ios,objective-c,iphone,gps,core-location,Ios,Objective C,Iphone,Gps,Core Location,我正在ios8+中开发一个应用程序,在其中我必须获取用户的位置。在屏幕(viewcontroller)中使用CLLocationManager时,我能够获取位置。但是,当我尝试直接从AppDelegate获取位置时,似乎出现了一些问题,并且我没有获得任何位置(流没有进入委托方法)。 有人能帮我吗 这是我使用的代码: CLLocationManager *locationManager = [[CLLocationManager alloc] init]; locationManager.dele

我正在ios8+中开发一个应用程序,在其中我必须获取用户的位置。在屏幕(viewcontroller)中使用CLLocationManager时,我能够获取位置。但是,当我尝试直接从AppDelegate获取位置时,似乎出现了一些问题,并且我没有获得任何位置(流没有进入委托方法)。 有人能帮我吗

这是我使用的代码:

CLLocationManager *locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
    [locationManager requestWhenInUseAuthorization];
}
if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [locationManager requestAlwaysAuthorization];
}
[locationManager startUpdatingLocation];

你能帮我做这个吗。谢谢

您也知道,iOS 8的CoreLocation权限已更改。如果您不请求新的权限授权,CoreLocation不会做任何事情。它悄悄地失败,因为从未调用委托方法

虽然这篇文章非常详细和冗长,但实际的代码修复可能很小,如下所示:

if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[locationManager requestWhenInUseAuthorization];
}
您必须向info.plist添加一个值,这是要在权限警报中显示的消息。见屏幕抓图

关键字:NSLocationWhenUse说明

值:需要位置来确定您所在的位置(您可以将其更改为您想要的任何内容)

  • CLLocationManagerDelegate
    添加到AppDelegate.h
  • @interface-AppDelegate:NSObject{

  • 将对象作为属性添加到AppDelegate.m
  • 您必须实现
    CLLocationManager
    对象作为属性

    @接口AppDelegate()
    @属性(非原子,强)CLLocationManager*locationManager;
    @结束

  • 将AppDelegate.m中的
    locationManager
    替换为
    self.locationManager
  • -(BOOL)应用程序:(UIApplication*)应用程序使用选项完成启动:(NSDictionary*)启动选项
    {
    self.locationManager=[[CLLocationManager alloc]init];
    self.locationManager.delegate=self;
    self.locationManager.desiredAccuracy=KCallocationAccuracyBest;
    if([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){
    [self.locationManager在未使用授权时请求];
    }
    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]){
    [self.locationManager请求始终授权];
    }
    [self.locationManager startUpdatingLocation];
    

    参考文献

    需要保留对location manager对象的强引用,直到涉及该对象的所有任务完成。因为大多数location manager任务都是异步运行的,所以将location manager存储在局部变量中是不够的


    我已经将密钥添加到plist中,当我通过视图控制器访问位置时,我能够获取该位置。但是,当我试图直接从appdelegate获取位置时,我无法获取该位置(因此,我可以在打开应用程序时直接获取位置,而不是在打开viewcontroller时获取位置)你能帮助我如何直接从appdelegateCool获取位置吗?它成功了!但是我很困惑..为什么它不能更早地工作?添加属性有什么区别?@auditya你必须保留CLLocationManager实例。我编辑了我的答案。