繁体   English   中英

当涉及到数据和UI时,如何在类之间进行通信?

[英]How to communicate between classes when both data and UI are involved?

我正在开发一个基于导航的iPhone应用程序,该应用程序使用OAuth与REST API进行通信,并且我想知道我的类应该如何最好地相互通信。 我有多个UITableViews,多个UITableViewDataSources,一个API类和一个在Web视图中处理身份验证的视图控制器。

这是我现在结构化的方式:

  • 我的UIApplicationDelegate拥有该类的实例,该实例知道如何与REST API通信
  • 我可以要求API类调用REST方法,并返回数据(它包装ASIHTTPRequest来透明地处理OAuth,因此它当前不知道哪个对象要数据)
  • 如果用户未通过身份验证,我可以要求API类启动OAuth流程
  • 可以显示OAuth对话框,并且应用程序代表用户授权访问API

我遇到的麻烦是,我的UITableViewDataSources需要与API类进行通信以获取其数据,但是身份验证可能需要首先进行,这涉及视图控制器提供的模式身份验证视图。

  1. 最好让每个UITableViewDataSource模型拥有自己的API类实例,或者API类应该是单例?

  2. 如果每个模型都拥有API类的实例,则应如何与视图控制器沟通需要进行身份验证?

  3. 如果API类是单例,那么它应如何与多个模型和视图控制器交互以显示身份验证对话框? 每个代表? 发布NSNotifications?

  4. 我没想到的其他方式?

确实,我认为问题的核心是我有一个主要用于数据获取目的的类,但是它可能需要用户交互才能成功完成。

我通常按​​照您描述的方式使用单例,并且效果很好。 这是我将如何回答您的问题。

  1. 辛格尔顿

  2. 不适用 使用单例。

  3. 通知运行良好,但是我倾向于将每个请求都传递给委托,然后将其保留在单例中,直到请求完成为止,此时,我仅使用成功或失败消息回叫给委托。 如果您有多个视图控制器是在你的导航堆栈的所有潜在的聆听和响应不同的通知可以得到相当混乱。 我已经看到了一些非常奇怪的错误。 如果您小心一点,通知就可以正常工作,但是传递委托可以使您将特定的委托(通常是当前的视图控制器)与特定的请求相关联,这通常是理想的。

  4. 我认为您在正确的轨道上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM