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

时间:2013-07-31 15:20:20

标签: ios objective-c delegates

所以在我的应用程序中我有以下情况:

BackendCommunicatingClass - > (拥有) - > ModelClass - > (拥有) - > HomescreenViewController

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

当应用程序第一次启动时,我也会这样:

WelcomeViewController - > (拥有) - > HomescreenViewController

  • HomescreenViewController是WelcomeViewController的委托。

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

您怎么看?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

也就是说,根据您的分层策略的严格程度,您可能更愿意通过拥有不同的委托来在每个步骤封装信息。