iOS:使用Grand Central调度程序动态更改UI元素

时间:2014-02-20 13:45:55

标签: ios iphone objective-c grand-central-dispatch viewcontroller

我想在共享静态对象(比如称为Manager)中创建一个GCD元素,每隔几秒钟从外部存储库(例如URL)获取一些数据并更改一个UIElement。申请ViewController

我的想法是:

  • AppDelegate初始化方法中初始化Manager对象(一旦应用程序被启动)
  • 在初始化方法中,启动一个获取数据的操作队列,并在每次获取后验证新内容是否与前一个内容不同(将在本地存储在Manager类中的变量中。)
  • 如果内容不同,请更改UIElement(例如,如果它是字符串,则UILabel会更改,如果是图像URL资源,则UIIMage将更改)。

我不知道如何从Manager类访问UILabel元素。我是朝着错误的方向前进还是有其他方式/模式来做到这一点? (我怀疑我需要创建一个静态Logic类,可以通过Manager类中的回调方法函数访问,并且引用包含ViewController的{​​{1}}

任何简单但很好的教程都会有很大的帮助。

2 个答案:

答案 0 :(得分:0)

您可以通过委派来实现这一目标。为Manager类定义一个名为ManagerDelegate的协议。然后,当经理完成其工作时,它可以向委托人发送有关其已完成或将要做的事情的信息。

一些示例委托方法可以是:

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

以下是Apple文档授权的一些​​信息:https://developer.apple.com/library/ios/documentation/general/conceptual/DevPedia-CocoaCore/Delegation.html

答案 1 :(得分:0)

发布通知。

在你想要更改的UILabel的ViewController中,在viewDidLoad中,执行以下操作:

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

然后在您的经理课程中,只要您想要更新标签:

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

您可以将数据与对象:参数一起发送,而不是为零,它可以是您想要的任何内容。