2014-10-22 83 views
4

我爲我的iOS應用程序創建了今天的擴展。我的應用程序正在後臺獲取新數據並將其保存到應用程序組中的共享數據庫中。刷新今日擴展視圖

我可以如何(如果可能的話)擴展名更新它的視圖時,主應用程序的後臺提取執行?如果這是不可能的,我怎樣才能做出同等的東西(比如定期更新擴展以檢查共享數據庫中的新數據)。

回答

12

你可以使用shared NSUserDefaults和observer它。

在你的應用程序

在更新數據庫,執行如下:

NSUserDefaults *userDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.yourcompany.sharedDefaults"]; 
[userDefaults setObject:[NSDate date] forKey:@"updatedDate"]; 
[userDefaults synchronize]; 


在你今天的Widget:

在viewDidLoad中添加一個觀察者:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(userDefaultsDidChange:) 
              name:NSUserDefaultsDidChangeNotification 
              object:nil]; 

然後

- (void)userDefaultsDidChange:(NSNotification *)notification { 
    // check updatedDate and update widget UI 
} 

參考:http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/

+0

謝謝!我看到這個教程,但對我來說不是有趣的部分......對我感到羞恥! – ThibaultV 2014-10-22 13:34:07

+0

addObserver方法不會被調用太多次嗎?每次調用viewDidLoad時,都不會解散觀察者? – Gabriel 2015-05-10 13:10:58

+0

viewDidLoad只被調用一次。你需要在dealloc方法中移除觀察者。 – scottphc 2015-05-10 13:14:01

1

系統創建的ViewController每一次,但你的單實例在今天插件代碼保持在長期的生活。