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