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

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

我正在开发一个很大程度上基于导航的iPhone应用程序,它使用OAuth与RESTAPI通信,我想知道我的类应该如何最好地相互通信。我有多个UITableView、多个UITableView数据源、一个API类和一个在Web视图中处理身份验证的视图控制器。

以下是我现在的结构:

  • 我的uiApplicationDelegate拥有一个知道如何与RESTAPI通信的类实例。
  • 我可以要求API类调用一个rest方法,它将返回数据(它包装asihttpRequests以透明地处理OAuth,因此它目前不知道哪个对象请求数据)
  • 如果用户没有通过身份验证,我可以请求API类启动OAuth进程。
  • 可以显示OAuth对话框,应用程序代表用户授予对API的访问权限。

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

  • 最好让每个UITableViewDataSource模型拥有自己的API类实例,还是让API类是单实例?

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

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

  • 我还没想到其他的方法?

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


    我通常按照你描述的方式使用单例,它很好地工作。以下是我如何回答你的问题。

  • 独生子女

  • 不适用。使用单件。

  • 通知工作得很好,但是我倾向于在每个请求中传递一个委托,然后在单例中保留它,直到请求完成为止,此时我只是用一条成功或失败的消息回调委托。如果您的导航堆栈中有多个视图控制器,这些控制器都可能监听并响应,则通知可能会变得相当混乱。我看到过这会引入一些非常奇怪的错误。如果您小心的话,通知工作得很好,但是传递委托允许您将特定委托(通常是当前视图控制器)与通常理想的特定请求相关联。

  • 我觉得你走对了。