是否可以直接从appDelegate获取GPS位置ios8
我正在ios8+中开发一个应用程序,在其中我必须获取用户的位置。在屏幕(viewcontroller)中使用CLLocationManager时,我能够获取位置。但是,当我尝试直接从AppDelegate获取位置时,似乎出现了一些问题,并且我没有获得任何位置(流没有进入委托方法)。 有人能帮我吗 这是我使用的代码:是否可以直接从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
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{
CLLocationManager
对象作为属性
@接口AppDelegate()
@属性(非原子,强)CLLocationManager*locationManager;
@结束
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实例。我编辑了我的答案。