【发布时间】:2014-11-09 21:46:03
【问题描述】:
根据新的更改,我确实更新了CLLocationManager 的代码,并添加了NSLocationAlwaysUsageDescription 和NSLocationWhenInUseUsageDescription 键。
manager = [[CLLocationManager alloc] init];
manager.delegate = self;
manager.distanceFilter = kCLDistanceFilterNone;
manager.desiredAccuracy = kCLLocationAccuracyBest;
NSLog(@"%d",[CLLocationManager authorizationStatus]); // always output 0
// check if iOS 8
if ([manager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[manager requestAlwaysAuthorization];
}
[manager startUpdatingLocation];
问题:该应用程序不再请求任何位置管理,即我在设置 -> 隐私 -> 位置服务下找不到它,locationManager:(CLLocationManager *)aManager didUpdateLocations:(NSArray *)locations 仍然没有被触发。我有什么遗漏吗?
编辑:[CLLocationManager authorizationStatus] 是0 即kCLAuthorizationStatusNotDetermined,因此我认为问题出在[manager requestAlwaysAuthorization] 以供参考这是我本地化的InfoPlist.strings(可能是它导致问题):
<key>NSLocationAlwaysUsageDescription</key>
<string>Text</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Text</string>
调用[manager requestAlwaysAuthorization]被执行,locationManager:didFailWithError:被执行但未被触发。
尝试使用不同的 Plist,但仍然没有成功:
<key>NSLocationWhenInUseUsageDescription</key>
<string>Text</string>
<key>NSLocationUsageDescription</key>
<string>Text</string>
还有一点需要注意:我的 Plist 是本地化的,这会是个问题吗?
【问题讨论】:
-
似乎应该可以。这是在设备还是模拟器上?模拟器在 xcode 6.1 中存在位置管理器问题。擦拭模拟器有时会有所帮助。另外,我认为这并不重要,但我认为您只需要两个 plist 键之一,而不是两者。
-
实现
locationManager:didFailWithError:方法。叫吗? -
@rmaddy 试过了,没有调用。
-
@EricS nop,设备。关于按键,刚试了1个,不行。
-
CoreLocation.framework 是否与应用关联?我想我曾经在未链接 CoreLocation 时看到过这个问题,这让我感到惊讶,因为我预计会出现链接错误而不是运行时错误。此外,检查 CLLocationManager 对象是否为 nil - 这可能有助于缩小范围。
标签: ios objective-c ios8 cllocationmanager