我读过很多关于我的iOS应用程序地理围栏的教程(例如here),但没有一本提到iOS是否允许在应用程序关闭时处理任何特定于应用程序的位置数据.

例如,我知道当应用程序在后台时,这些服务仍然会存在(如果编码正确),但当用户双击home按钮并关闭应用程序时,情况如何?仍然可以获得位置数据吗?

推荐答案

根据Apple Documentation,在Using Regions to Monitor Boundary Crossings部分:

在iOS中,您向location manager注册的区域将保持不变

是的,您的应用程序将被唤醒(或重新启动!)当系统的位置检测到你进入/退出(取决于你的设置)一个所需的区域时,这当然是即使你的应用程序没有运行.你只需要在应用程序委托中正确处理它,当应用程序重新启动时,你会在选项字典中获得一个UIApplicationLaunchOptionsLocationKey键.有关详细信息,请参阅下面的文档链接.

请记住,iOS 6中不推荐使用-startMonitoringForRegion:desiredAccuracy:方法,因此不应使用它.而是使用-startMonitoringForRegion.

要知道在发生位置事件后重新启动应用程序时如何处理,请参阅文档here,您将看到的信息在不推荐使用的方法的讨论中,但它仍然应该是相关的,我相信苹果在不推荐使用旧方法时忘了将这些信息迁移到新方法.我已经向他们提交了一个bug.

UPDATE

在我的错误报告之后,苹果更新了CLLocationManager的文档.文档现在指定了应用程序在终止后启动或不启动的位置监控类型.

Objective-c相关问答推荐

UIAlertController:supportedInterfaceOrientations 被递归调用

禁用手势识别器

使用正则表达式搜索 NSString

使用 [NSBundle mainBundle] pathForResource: ofType:inDirectory: 访问文件

将 CFDictionaryRef 转换为 NSDictionary?

xcode 未知类型名称

CABasicAnimation 无 HUGE_VALF 无限重复?

使用对象引用的 NSArray,我是显式释放数组中的所有对象还是仅释放数组本身?

使用 UIViewControllerInteractiveTransitioning 委托协议实现自定义 UIViewController 交互式过渡的正确方法

UICollectionView 标头未显示

Grand Central Dispatch (GCD) 与 performSelector - 需要更好的解释

在 iPhone 应用程序中使用 RestKit 的最佳方式

有没有办法更新单个 UITableViewCell 的高度,而无需重新计算每个单元格的高度?

Xcode 在您的 keys 串中找不到此配置文件的有效私有证书/有效密钥对

带有 NSBlockOperation 和队列的 NSURLSession

我可以在 Objective-C 中重载运算符吗?

IOS 6强制设备方向为横向

command/usr/bin/codedesign 失败,退出代码 1-代码符号错误

如何判断 WkWebView 是否在 Objective-C 中完成加载?

无法在 iOS7 上将 UITextField 添加到 UIAlertView ...在 iOS 6 中有效