2012-05-02 59 views
2

我的應用在應用進入後臺模式時正在下載JSON對象。該應用程序將它們轉換爲核心數據實體。我運行的問題是我需要將這些核心數據實體的託管對象上下文與主要託管對象上下文進行合併。iPhone iOS在背景中運行應用程序生成並處理通知?

合併這些變化的方式是通過通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextHasChanged:) name:NSManagedObjectContextDidSaveNotification object:nil]; 


- (void)contextHasChanged:(NSNotification*)notification 
{ 

    NSLog(@"received notification with object: %@",[[notification object] description]); 
    if ([notification object] == [AppUser managedObjectContext]) return; 

    if (![NSThread isMainThread]) { 
     [self performSelectorOnMainThread:@selector(contextHasChanged:) withObject:notification waitUntilDone:YES]; 
     return; 
    } 

    [[AppUser managedObjectContext] mergeChangesFromContextDidSaveNotification:notification]; 
} 

出於某種原因,在後臺運行,而我的代碼不會收到這些通知。 應用程序在後臺模式下運行時是否繼續生成通知?或者是我註冊這種錯誤通知的位置?

謝謝您的澄清!

回答

2

應用程序繼續在主或背景中發送通知。你需要照顧 觀察員在添加觀察員和發佈通知期間不應該被釋放。我thnk有可能在implementaion一些mistak閱讀本

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html

+0

感謝節,我已經證實了我的代碼可以繼續處理通知基於代碼,同時在後臺模式! (我發現一個班可以爲我做這個)。 –

+0

歡迎你,親愛的 – Saad

2

一旦按下Home鍵,你的應用程序進入掛起模式。它不會處理上述通知,直到您通過點擊其圖標「喚醒」它。

爲確保您的應用繼續執行其任務,您需要請求後臺任務完成。然後操作系統會給您600秒(10分鐘)的時間完成您的應用在暫停之前執行的任何任務。

你可以閱讀更多關於它在這裏:https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW3

具體來說,就是在上面的鏈接「後臺執行和多任務處理」。

1

在後臺可以接收的通知類型有限制。此外,發送通知是您在進入後臺之前安排的。

如果您需要在應用程序進入背景時繼續工作,則還應該調用beginBackgroundTaskWithExpirationHandler。

主要文件是在這裏:

http://developer.apple.com/library/ios/ipad/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

向下滾動到在後臺執行和多任務處理

相關問題