1

我刚刚遇到了一个我认为我会分享的问题。在我的 iOS 日历使用中,我在应用程序委托中使用 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 吗?

我假设这是真的。如果在调用应用程序委托 applicationDidBecomeActive 方法之前调用了我的一个方法(在应用程序委托之外),这对我来说似乎很不寻常。

4

1 回答 1

1

我的假设是不正确的。requestAccessToEntityType:回调可以在调用应用委托方法之前执行。applicationDidBecomeActive:我刚刚在我的代码中观察到了这一点。我不是 100% 确定这是否总是执行顺序。

在考虑了更多之后,我现在要编写代码,以便我不依赖于这种调用顺序或applicationDidBecomeActive:调用时requestAccessToEntityType:是否调用。似乎Apple没有指定这种行为(applicationDidBecomeActive:在被调用时被调用),并且可能会改变。requestAccessToEntityType:

于 2014-09-10T21:53:16.597 回答