gpt4 book ai didi

objective-c - 通知某个事件的所有加载的 ViewController

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:38 25 4
gpt4 key购买 nike

我有一个类,每隔一段时间就在后台同步一次数据。用户可以位于应用程序导航树中的任何位置,无论用户在哪里,我都需要能够使用刚刚同步的任何新数据更新 View Controller 。

我将负责后台线程同步的对象作为 SharedAppDelegate 的一个属性。

在某种程度上,我需要实现类似观察者模式的东西,每次我实例化一个 View Controller 时,将它设置为监听后台同步对象上的一些事件,以便在每次同步后我可以在 View Controller 中执行一个方法正在听。

我不确定在 Objective-C 中执行此操作的正确方法是什么,或者是否有更好或推荐的方法。

最佳答案

NSNotificationNSNotificationCenter 结合使用,这恰好符合您的目的:

  • 在您的 AppDelegate 中,当同步结束时,调用

    [[NSNotificationCenter defaultCenter] postNotificationName:@"SyncEnded" object:mySyncObject]
  • 在您显示的每个 View Controller 中,调用

    _myObserver = [[NSNotificationCenter defaultCenter] addObserverForName:@"SyncEnded" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note){ ...your UI refresh code... }
  • 也不要忘记在不再需要时移除观察者( View Controller 已释放/卸载/不可见,由您决定),否则 NSNotificationCenter 将最终崩溃:

    [[NSNotificationCenter defaultCenter] removeObserver:_myObserver];

一些注意事项:

此示例使用基于 block 的 API 在主操作队列(暗示在主线程)上执行 UI 刷新工作,因为您不得在主线程以外的任何其他线程上执行 UIKit 操作。您的后台同步很可能会在其他线程上发送通知,因此有必要切换到主线程。如果您想使用基于选择器的 API,请务必在主线程上发送通知。

您可以根据需要在通知上注册任意数量的观察者,因此这完全符合您的模式(NSNotifications 通常是通知不同应用程序组件同步结束等应用程序范围事件的最佳方式).

发布通知时传递的 object 参数允许您在需要时使用 note.object 访问观察者 block 中的同步对象。

关于objective-c - 通知某个事件的所有加载的 ViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11878265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com