在后台接收并回复EKEventStoreChangedNotification?

时间:2014-03-12 22:17:53

标签: ios ios7 eventkit

我想知道如果在iOS7中,使用新的API,它最终可以在后台响应通知,在我的情况下,我有以下观察者:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(storeChanged:)
                                             name:EKEventStoreChangedNotification
                                           object:eventStore];

我收到通知完美但我需要运行应用程序才能调用选择器。我已经浏览了回复,他们说这不可能,但不确定他们是否具体指的是iOS7。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:5)

EKEventStoreChangedNotification仅在您的应用程序到达前台时触发。但是,如果您想在后台调用storeChanged:方法,并且因此已经更新了UI,那么您需要在应用程序中添加后台获取功能。

<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
</array>

在您的app appate didFinishLaunchingWithOptions方法中添加行

[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];

这可确保您的应用实际调用后台提取,因为默认时间间隔永远不会。此最小密钥是确保iOS处理何时调用后台获取方法的键。如果您不想让它尽可能频繁地开火,您可以设置自己的最小间隔。

最后在你的app delegate中实现后台获取方法:

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
 [self storeChanged:nil];
 completionHandler(UIBackgroundFetchResultNewData);
}

您可以在调试时从Xcode中进行测试&gt;模拟后台获取。

答案 1 :(得分:0)

首先,当应用程序在后台时,您只能使用后台任务API运行方法,以便在您进行后台处理后调用方法(只要您的任务不需要太长时间 - 通常〜 10分钟是最大允许时间)。这适用于iOS甚至iOS7的所有版本。

请阅读此question 以获得更多说明。

App States and Multitasking Guide by Apple可以为您提供有关背景处理的更多说明。