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

时间:2010-07-13 23:36:49

标签: iphone cocoa-touch oop

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

以下是我现在的结构:

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

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

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

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

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

  4. 其他一些我没有想过的方法?

  5. 真的,我认为问题的核心是我有一个主要用于数据提取的类,但可能需要用户交互才能成功。

1 个答案:

答案 0 :(得分:0)

我通常以你描述的方式使用单身,它运作良好。以下是我将如何回答您的问题。

  1. 的Singleton

  2. N / A。使用单身人士。

  3. 通知效果很好,但我更倾向于为每个请求传递一个委托,然后在单例内保持它,直到请求结束,此时我只是回调给委托成功或失败的消息。如果您的导航堆栈中有多个 live 视图控制器,则所有潜在的监听和响应都会导致通知变得非常混乱。我已经看到了介绍一些非常奇怪的错误。如果您小心,通知工作正常,但传递委托允许您将特定委托(通常是当前视图控制器)与通常理想的特定请求相关联。

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