0

我想在共享靜態對象(稱爲管理器)中創建一個GCD元素,它將每隔幾秒從外部存儲庫中獲取一些數據(例如URL)並在應用程序ViewController中更改UIElementiOS:使用Grand Central調度程序動態更改UI元素

我的想法是:

  • 初始化在AppDelegate初始化方法的管理對象(只要應用得到午飯)
  • 在初始化方法啓動獲取數據和操作隊列,在每次獲取之後,驗證新內容是否與前一個不同(將本地存儲在Manager類中的變量中)
  • 如果內容不同,請更改UIElement(例如,如果它是字符串,那麼UILabel會改變,如果它是一個圖片URL資源,那麼UIIMage將改變)。

我從Manager類如何訪問UILabel元素不知道。我是走錯方向還是有其他方式/模式來做到這一點? (我懷疑我需要創建一個靜態的邏輯類,可以通過Manager類中的回調方法函數訪問它,並且引用ViewController,其中包含UIElements

任何簡單但很好的教程都是很多幫助。

+0

[NSFetchedResultsController](http://www.raywenderlich.com/999/core-data-tutorial-for-ios-how-to-use-nsfetchedresultscontroller)。它可以通知你什麼對象被改變,所以你可以重新加載適當的UI元素。 –

回答

0

您可以通過委派實現此目的。爲Manager類定義一個名爲ManagerDelegate的協議。然後,當經理完成工作時,可以發送委託人有關已完成或將要完成的信息。

一些樣品委託方法可能是:

- (void)managerBeganNewFetchRequest:(Manager *)manager; 
- (void)manager:(Manager *)manager foundNewData:(id)data; 
- (void)manager:(Manager *)manager didReceiveDuplicateData:(id)data; 

這裏有一個代表團一些信息來自蘋果的文檔:https://developer.apple.com/library/ios/documentation/general/conceptual/DevPedia-CocoaCore/Delegation.html

0

張貼通知。

在你想改變的UILabel,在viewDidLoad中您的視圖控制器,做這樣的事情:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLabel) name:@"ManagerUpdated" object:nil]; 

然後在您的管理器類,每當你想更新標籤:

[[NSNotificationCenter defaultCenter] postNotification:@"ManagerUpdated" object:nil]; 

您可以將數據與對象:參數一起發送,而不是零,它可以是任何您想要的。

相關問題