2014-03-12 49 views
0

我如果在iOS7知道,與新API的是終於可以對通知做出迴應的背景下,在我的情況,我有以下觀察:在後臺接收並響應EKEventStoreChangedNotification?

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

我收到通知完美,但我需要運行應用程序,以便選擇器被調用。我瀏覽了回覆,他們說這是不可能的,但不知道他們是否專指iOS7。

有什麼想法?

謝謝!

回答

5

EKEventStoreChangedNotification只會在應用程序到達前臺時觸發。但是,如果您想在後臺調用您的storeChanged:方法,並且因此在再次到達前臺時已經更新了UI,則需要將後臺抓取功能添加到您的應用中。

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

在你的應用程序代理didFinishLaunchingWithOptions方法中添加一行

[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum]; 

這可以確保您的應用程序實際上是調用你的背景提取,作爲默認的間隔是永遠。這個最小密鑰是確保iOS處理何時調用您的後臺獲取方法的關鍵。如果你不想讓它儘可能頻繁地觸發,你可以設置你自己的最小時間間隔。

最後落實的背景在您的應用程序委託提取方法:

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

您可以在Xcode測試,同時從調試調試>模擬背景提取。

0

首先,當應用程序處於後臺時,只能使用後臺任務API在後臺操作後調用方法(只要您的任務不需要太長時間 - 通常大約10分鐘就是最大允許時間)。這適用於iOS甚至iOS7的所有版本。

請閱讀question瞭解更多說明。

App States and Multitasking Guide by Apple可以給你更多關於後臺處理的說明。