如何在UINavigation类型的应用程序中的视图控制器之间进行通信?

时间:2011-05-27 22:44:40

标签: iphone ios ios4 uinavigationcontroller

我有一个基于UINavigation的应用程序,它收集各种屏幕上的信息,最终使用收集的所有参数发出Web服务请求。

所以我有A,B,C,D视图控制器。 A获得名称&数字,它然后用一些基本信息ETC ETC将B推到屏幕上,直到它到达D,我实际上启动了Web服务。

我一直在使用的糟糕方法是从A开始复制类字段。这意味着如果我收集名称和数字,那么我将这些字段设为B,然后添加几个字段,然后C具有A& A的类字段。 B看起来像是一个糟糕的编程实践。

如何访问D类中的A类字段?我已经得到了一些想法,但不确定它们的有效性。

1)。使用NSNotification(这是否过度?)如果是这样,我如何传递字段? 2)。我只保留所有5个视图控制器,并在最后得到信息吗? (似乎非常低效)

3)。我应该只是实例化一个名为Payload的NSObject类,并且每次从一个视图控制器反弹到另一个视图控制器时只设置它的字段吗? (如果是这样的话,我在A类中创建它?如果用户导航回A类,那么它将被重置为ETC ETC)

正如你所知,我试图找到一个解决方案而且我对它很新。一些详细的建议将受到高度赞赏。

3 个答案:

答案 0 :(得分:2)

根据具体情况,有几种方法看似合适。

  1. 了解MVC Design Pattern

  2. 类不是数据存储。如果类没有与表示对象交互的接口,不包括访问者,那你就错了。

  3. 3

      

    我有一个基于UINavigation的   收集信息的应用程序   在各种屏幕上,最终   使用all发出Web服务请求   收集的参数。

    因此,您的网络请求基于从各种视图收集的参数。为什么不创建一个 上述要求的模型? MyRequest或类似的东西:)或几个更具体的变种,共享共同的父类?这个生成器保存逻辑,在前进视图时收集数据和参数,并在最后向WebView提供NSUrlRequest,或者提供NSURLRequest委托的不同类型的对象,并且符合用于显示下载数据的UITableViewDataSource / Delegate协议。

答案 1 :(得分:0)

我会去3),是的,你应该在开始时创建它(A类)。

但也许用户可以回到A级来改变价值,所以重置它似乎不是问题。

答案 2 :(得分:0)

为什么不使用单个对象并传递它?

这种方法的优点是:

  • 只有一个实例 参考正在传递 在viewcontrollers之间
  • 改变你 make会在下次你反映出来 从另一个视图访问此对象 控制器

为了回答你的一个问题,NSNotification允许我们传递对象......

这是Matt Galloway在iOS中单例对象的一个​​很好的例子。这是我经常提到的那个:

http://www.galloway.me.uk/tutorials/singleton-classes/