我正在使用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];
你能帮我解决这个问题。感谢
答案 0 :(得分:1)
另请注意,iOS 8的CoreLocation权限已更改。如果您未请求新的权限授权,则CoreLocation不会执行任何操作。它安静地失败,因为从不调用委托方法。
虽然文章非常详细且篇幅很长,但实际的代码修复可能与此相同:
if ([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
[locationManager requestWhenInUseAuthorization];
}
您必须向info.plist添加一个值,这是要在权限警报中显示的消息。看屏幕抓取。
密钥:NSLocationWhenInUseUsageDescription
价值:需要位置才能找到你所在的位置(你可以根据需要改变它)
答案 1 :(得分:1)
CLLocationManagerDelegate
添加到AppDelegate.h @interface AppDelegate : NSObject < UIApplicationDelegate, CLLocationManagerDelegate> {
CLLocationManager
对象作为属性添加到AppDelegate.m 您必须将CLLocationManager
对象实现为属性。
@interface AppDelegate ()
@property (nonatomic, strong) CLLocationManager *locationManager;
@end
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];
在涉及该对象的所有任务完成之前,需要保留对位置管理器对象的强引用。由于大多数位置管理器任务以异步方式运行,因此将位置管理器存储在本地变量中是不够的。