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

时间:2015-09-30 10:34:23

标签: ios objective-c iphone gps core-location

我正在使用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];

你能帮我解决这个问题。感谢

2 个答案:

答案 0 :(得分:1)

另请注意,iOS 8的CoreLocation权限已更改。如果您未请求新的权限授权,则CoreLocation不会执行任何操作。它安静地失败,因为从不调用委托方法。

Try this link

虽然文章非常详细且篇幅很长,但实际的代码修复可能与此相同:

if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[locationManager requestWhenInUseAuthorization];
}

您必须向info.plist添加一个值,这是要在权限警报中显示的消息。看屏幕抓取。

enter image description here

密钥:NSLocationWhenInUseUsageDescription

价值:需要位置才能找到你所在的位置(你可以根据需要改变它)

答案 1 :(得分:1)

  1. CLLocationManagerDelegate添加到AppDelegate.h
  2. @interface AppDelegate : NSObject < UIApplicationDelegate, CLLocationManagerDelegate> {

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

      @interface AppDelegate () @property (nonatomic, strong) CLLocationManager *locationManager; @end

      1. 在AppDelegate.m
      2. 中将locationManager替换为self.locationManager

        - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { [self.locationManager requestWhenInUseAuthorization]; } if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { [self.locationManager requestAlwaysAuthorization]; } [self.locationManager startUpdatingLocation];

        REF。 https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/

          

        在涉及该对象的所有任务完成之前,需要保留对位置管理器对象的强引用。由于大多数位置管理器任务以异步方式运行,因此将位置管理器存储在本地变量中是不够的。