3 回答
TA贡献1829条经验 获得超7个赞
WWDC会话“核心位置的新增功能”中解释了此新属性。
默认值是NO如果您链接到iOS 9。
如果您的应用程序在后台使用位置(不显示蓝色状态栏),你必须设定allowsBackgroundLocationUpdates到YES除了设置在Info.plist中的背景模式的能力。否则,位置更新仅在前台交付。优势在于,您现在可以在同一应用程序中使用具有后台位置更新的位置管理器和仅具有前台位置更新的其他位置管理器。您也可以重置该值NO以更改行为。
该文档对此非常清楚:
默认情况下,对于与iOS 9.0或更高版本链接的应用程序,此设置为否,无论最低部署目标是什么。
通过将UIBackgroundModes设置为在Info.plist中包括“位置”,每当调用-startUpdatingLocation并意图在后台继续时,还必须在运行时将此属性设置为YES。
当UIBackgroundModes不包含“位置”时将此属性设置为YES是致命错误。
将此属性重置为NO等效于从UIBackgroundModes值中省略“位置”。只要应用程序正在运行(即未挂起)并且具有足够的授权(即,它具有WhileInUse授权且正在使用中,或者具有Always授权),仍然允许访问位置。但是,该应用仍将遵守通常的任务暂停规则。
有关可能的授权值的更多详细信息,请参见-requestWhenInUseAuthorization和-requestAlwaysAuthorization。
TA贡献1828条经验 获得超6个赞
好吧,我仍在使用xCode 6,因为7 beta总是在模拟器中崩溃,尽管我什至没有针对iOS9进行链接,但我还是遇到了这个问题!而且我无法设置此属性,因为它在iOS8中不存在!哦,苹果,折磨什么时候结束?
我通过执行此后期绑定调用将其更改为与xCode6兼容的版本:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) {
BOOL yes = YES;
NSMethodSignature* signature = [[CLLocationManager class] instanceMethodSignatureForSelector: @selector( setAllowsBackgroundLocationUpdates: )];
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: signature];
[invocation setTarget: locationManager];
[invocation setSelector: @selector( setAllowsBackgroundLocationUpdates: ) ];
[invocation setArgument: &yes atIndex: 2];
[invocation invoke];
}
确认可以在iOS8(不做任何事情)和iOS9 beta 6(正确调用该方法)上工作。
- 3 回答
- 0 关注
- 1014 浏览
添加回答
举报