Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在后台接收并响应EKEventStoreChangedNotification?_Ios_Ios7_Eventkit - Fatal编程技术网

Ios 在后台接收并响应EKEventStoreChangedNotification?

Ios 在后台接收并响应EKEventStoreChangedNotification?,ios,ios7,eventkit,Ios,Ios7,Eventkit,我想知道在iOS7中,使用新的API是否最终能够在后台响应通知,在我的例子中,我有以下观察者: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(storeChanged:) name:EKEventStoreChangedNot

我想知道在iOS7中,使用新的API是否最终能够在后台响应通知,在我的例子中,我有以下观察者:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(storeChanged:)
                                             name:EKEventStoreChangedNotification
                                           object:eventStore];
我完美地收到了通知,但我需要运行应用程序,以便调用选择器。我浏览了回复,他们说这是不可能的,但不确定他们是否特别提到了iOS7

有什么想法吗


谢谢

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

请阅读本文以了解更多说明


可以为您提供有关后台处理的更多说明。

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

请阅读本文以了解更多说明


可以为您提供有关后台处理的更多说明。

EKEventStoreChangedNotification仅在您的应用程序出现在前台时启动。但是,如果您想在后台调用storeChanged:方法,从而使UI在再次进入前台时已经更新,则需要将后台提取功能添加到应用程序中

<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
</array>
这可以确保你的应用程序实际调用你的后台抓取,因为默认的时间间隔是从不。此最小键是确保iOS处理何时调用后台获取方法的键。如果您不想让它尽可能频繁地开火,您可以设置自己的最小间隔

最后,在应用程序委托中实现后台提取方法:

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

您可以在Xcode中进行测试,同时从“调试>模拟后台提取”进行调试。

EKEventStoreChangedNotification仅在应用程序到达前台时启动。但是,如果您想在后台调用storeChanged:方法,从而使UI在再次进入前台时已经更新,则需要将后台提取功能添加到应用程序中

<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
</array>
这可以确保你的应用程序实际调用你的后台抓取,因为默认的时间间隔是从不。此最小键是确保iOS处理何时调用后台获取方法的键。如果您不想让它尽可能频繁地开火,您可以设置自己的最小间隔

最后,在应用程序委托中实现后台提取方法:

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
 [self storeChanged:nil];
 completionHandler(UIBackgroundFetchResultNewData);
}
您可以在调试时从“调试”>“模拟后台提取”在Xcode中进行测试