我刚遇到了一个我认为我会分享的问题。在我的iOS日历使用中,我在app delegate中使用applicationDidBecomeActive来检查用户日历设置是否已更改。具体来说,在获取applicationDidBecomeActive回调之后,我执行以下操作:
// self.eventStore is of type EKEventStore *
EKCalendar *cal = [self.eventStore calendarWithIdentifier: calendarIdentifier];
if (!cal) {
// Assume we no longer have access to the users calendar; e.g., they have change their privacy settings.
}
然而,我遇到了一个问题。 (多么令人惊讶!:))。我发现当我们最初做requestAccessToEntityType时也会调用applicationDidBecomeActive。也就是说,在Apple向用户显示“警报”以询问用户是否希望我们的应用程序可以访问其日历之后,我们的应用程序会获得applicationDidBecomeActive回调。我唯一剩下的问题,现在我已经想到了:
当调用requestAccessToEntityType时,我们是否总是在调用requestAccessToEntityType的完成处理程序之前获取applicationDidBecomeActive ?
我认为这是真的。如果在调用app委托applicationDidBecomeActive方法之前调用了我的方法(在app委托之外),那对我来说似乎很不寻常。
答案 0 :(得分:1)
我的假设不正确。在调用app delegate requestAccessToEntityType:
方法之前,可以执行<{1}}回调。我刚刚在我的代码中发现了这一点。我不能100%确定这是否始终是执行的顺序。
在考虑了这一点之后,我现在要进行编码,这样我就不会依赖于这种来电排序,或者applicationDidBecomeActive:
是否会调用applicationDidBecomeActive:
叫做。似乎这种行为(调用requestAccessToEntityType:
时调用applicationDidBecomeActive:
)并未由Apple指定,并且可能会更改。