Obj-C中的委派模式-我做错了吗



所以在我的应用程序中,我遇到了以下情况:

后端通信类->(拥有者)->模型类->(所有者)->HomescreenViewController

  • HomescreenViewController是ModelClass的委托
  • ModelClass是BackendCommunicatingClass的委托

同样在应用程序第一次启动时,我有这个:

欢迎使用ViewController->(归)->HomescreenViewController

  • HomescreenViewController是WelcomeViewController的代理

当用户在WelcomeViewController中键入用户名和密码时,此信息需要一直返回到BackendCommunicatingClass,然后再返回到WelcomeViewControl以在需要时显示错误。现在,我已经通过向通信链中的每个类传递信息来实现了这一点,直到它到达BackendCommunicatingClass。结果是协议方法有很多重复,我觉得我做错了。

你觉得怎么样?

我知道这不是最清晰的解决方案,但如果没有代码和程序的目的,这就是我的建议。

  • 在后端视图控制器中实现键值观察(KVO),观察主视图控制器中的变化。一旦后端控制器通过主视图控制器中的专用变量检测到文本字段中的更改,它就会触发所有必须执行的操作
  • 当后端完成时,它会发送一个带有操作结果的NSNotification。主视图控制器,您已使其侦听此类自定义通知,对此作出反应并显示错误消息或其他人员

这听起来可能很复杂,但KVO和通知很容易实现,而且网上有很多文档和教程。

如果这些委托协议提供的内容有一个清晰的1:1映射,并且委托不处理除了直接拥有的视图控制器之外什么都不应该关心的UI内容,则可以将委托传递到链的末端,并将其直接设置为委托。这就是代理的目的——能够允许一个不关心的对象与另一个对象进行通信。

也就是说,根据分层策略的严格程度,您可能更喜欢在每一步都通过不同的委托来封装信息。

最新更新