我可能会混淆区域监控的工作原理,但这是我到目前为止所做的:
我正在通过我的位置管理器注册要监视的区域,该位置管理器在单例类上实现,此单例也被设置为位置管理器的委托,因此正在调用已实现的方法。
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
这完全符合预期,如果应用程序处于活动状态或暂停状态,则调用该方法。它也很有意义,因为该类已经被加载,当该区域进入事件时,iOS会将此甚至发送到我的应用程序,该应用程序调用已注册的位置管理器(可能有一个引用它),然后它调用任何委托也是沿着它注册(因为课程已准备好并加载)。
问题是,应用程序被杀后会发生什么?它是第一次进入后台吗? iOS如何知道要调用的委托方法,以及它是否已被加载?
答案 0 :(得分:8)
当您的应用程序被杀死并开始进行位置更新时,目前还没有位置管理员委托,因此没有向该委托发送通知。系统无法知道哪些类应该用作位置管理器委托或如何实例化它。
而是像往常一样调用application:didFinishLaunchingWithOptions:
,但在选项字典中设置了UIApplicationLaunchOptionsLocationKey
。这告诉你的应用你需要实例化一个位置管理器并设置它的委托。只有在您执行此操作后,才会使用区域更新调用委托。