视图控制器之间进行通信的最佳方式是什么?
作为对Objective-C,可可和iPhone开发人员的新手,我强烈希望充分利用语言和框架。 我正在使用的资源之一是斯坦福大学的CS193P类笔记,它们已经留在网上了。它包括讲义,作业和示例代码,并且由于该课程是由Apple开发人员提供的,因此我绝对认为它是“从马口算起的”。 课堂网站:http: //www.stanford.edu/class/cs193p/cgi-bin/index.php 第08课与构建基于UINavigationController的应用程序有关,该应用程序将多个UIViewControllers推送到UINavigationController堆栈上。这就是UINavigationController的工作方式。这是合乎逻辑的。但是,幻灯片中有一些关于UIViewController之间进行通信的严厉警告。 我将从这些严肃的幻灯片中引用:http : //cs193p.stanford.edu/downloads/08-NavigationTabBarControllers.pdf 第16/51页: 如何不共享数据 全局变量或单例 这包括您的应用程序委托 直接依赖关系使代码的可重用性降低 而且更难调试和测试 好。我对此感到沮丧。不要盲目地将用于在viewcontroller之间进行通信的所有方法扔到您的应用程序委托中,并在应用程序委托方法中引用viewcontroller实例。公平的诺夫。 再进一步,我们得到这张幻灯片,告诉我们应该做什么。 第18/51页: 数据流最佳实践 弄清楚究竟需要传达什么 为您的视图控制器定义输入参数 为了在层次结构之间进行通讯,请使用松散耦合 为观察者定义通用接口(例如委派) 然后,在此幻灯片之后是看似占位符的幻灯片,在该幻灯片中,讲师显然使用UIImagePickerController的示例演示了最佳实践。我希望这些视频可用!:( 好的,所以...我怕我的objc-fu不太牢固。我也对上面引用的最后一行感到困惑。我一直在尽职调查这个问题,发现似乎是一篇体面的文章,在谈论观察/通知技术的各种方法:http : //cocoawithlove.com/2008/06/five-approaches-to -listening-observing.html 方法5甚至将委托表示为方法!除了...对象只能一次设置一个委托。因此,当我有多个ViewController通讯时,我该怎么办? 好的,那是设置帮派。我知道我可以通过引用appdelegate中的多个viewcontroller实例轻松地在应用程序委托中执行通信方法,但是我想以正确的方式进行此类操作。 请回答以下问题,以帮助我“做正确的事”: 当我尝试在UINavigationController堆栈上推送新的viewcontroller时,谁应该执行此推送。 我的代码中哪个类/文件是正确的位置? 当我想影响一些数据块(伊娃的值),我UIViewControllers之一,当我在不同的UIViewController,什么是“正确”的方式做到这一点? 假设我们一次只能在一个对象中设置一个委托,那么当讲师说“为观察者定义通用接口(如委托)”时,实现将是什么样子。如果可能的话,一个伪代码示例将非常有帮助。