0

我正在开发一个聊天应用程序,其中有多个视图控制器类。我还有一个通用类,在服务器和客户端之间进行通信。这个通信类永远不知道它访问了哪个视图控制器,因为所有视图控制器都出于不同的原因访问了它。在这种情况下,我需要在通信类发生此类错误时立即向所有视图控制器更新“连接失败”、“互联网故障”、“数据失败”、“聊天通信失败”等状态. 我正在考虑通过在单例类中设置标志并在其他任何地方访问它(或)具有协议(比单例非常安全)并在通信类中设置状态标志来解决,

有人可以告诉我我是否正在以正确的角度思考实施并可以通过这些方法实现吗?

4

2 回答 2

2

看一下通知,它们旨在像这样一般分发到多个实例。请参阅NSNotificationCenter.

正如您似乎误解的那样,通知不仅仅针对硬件事件。它们是一种用于分发信息的通用广播机制,就像委托是一种允许单个对象管理另一个对象行为的通用机制一样。

换句话说,您的通信处理程序应该发布状态更改通知,并且您的其他控制器应该都注册以接收该通知,并且可以响应但适合他们。

发布示例;当你的文件完成加载时放这个:

    [[NSNotificationCenter defaultCenter] postNotificationName:@"PDLAssetManagerAssetFileLoaded" object:self];

并且在加载完成时需要更新自身的每个控制器中,放置:

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

whereloadComplete:是将通知作为参数的方法,并执行您需要它执行的任何操作。您可以使用我在这里忽略的 userInfo 字典传递额外的数据。 热点提示:将通知名称字符串设为常量;为了简洁起见,我跳过了这个。

于 2012-09-29T20:16:13.823 回答
0

作为 NSNotificationCenter 的替代方案,您可以使用它;

1-为您的通信类实现一个委托。

2-在请求的情况发生时实现回调(等连接失败)

3-将您的应用程序委托设置为您的通信类的委托

4- 当回调发生时,从您的应用程序委托中查看您所在的视图控制器,然后采取行动。

于 2012-09-29T20:24:40.317 回答