Iphone 在视图控制器之间传播数据

Iphone 在视图控制器之间传播数据,iphone,Iphone,我有一个表视图控制器。表格的某些行打开新的控制器,让用户输入更多数据或使用选择器等。这就像内置的日历应用程序一样。当用户在第二个屏幕上点击“Save”时,我希望该屏幕上的值传播回table view控制器,但我不知道如何操作。因为我使用pushNavigationController进入第二个屏幕,所以没有机会提供指向原始对象的指针。(这看起来真是糟糕的设计,即使这是可能的,因为第二个控制器必须了解其父控制器的情况。) 此外,从测试来看,pushNavigationController似乎不会“

我有一个表视图控制器。表格的某些行打开新的控制器,让用户输入更多数据或使用选择器等。这就像内置的日历应用程序一样。当用户在第二个屏幕上点击“Save”时,我希望该屏幕上的值传播回table view控制器,但我不知道如何操作。因为我使用pushNavigationController进入第二个屏幕,所以没有机会提供指向原始对象的指针。(这看起来真是糟糕的设计,即使这是可能的,因为第二个控制器必须了解其父控制器的情况。)

此外,从测试来看,pushNavigationController似乎不会“暂停”原始控制器,这样,在弹出第二个屏幕后,您就不会继续执行下一行代码


看起来我缺少了一些基本的东西。

苹果的许多框架都支持MVC(模型-视图-控制器)设计模式。控制器(本例中为UITableViewController)协调数据的采集,以便切换到视图(本例中为UITableView)。为了充分利用这种模式,您的数据应该来自模型对象。这是一个用来表示数据的对象,它提供了一个抽象,以便UI实现和数据松散耦合。当您的控制器推动另一个控制器进一步检查或编辑数据时,模型对象将传递到此控制器,以便新控制器可以访问模型中包含的数据。用户更改UI中的数据,然后在按下“保存”时修改模型对象


当用户按下“保存”按钮时,有多种方法可以将更改传播回UITableViewController。您可以使用KVO(键值观察),当模型对象的属性发生更改时,会通知表或其单元格之一。另一种方法是在两个控制器之间使用NSNotificationCenter通知来传达更改。

我最终使用了目标操作模式,因为我在Cocoa文档中找到了对它的大量引用。我将视图控制器和选择器传递给子控制器,子控制器在检测到按钮按下时调用它。因此,子控制器执行[target performSelector:action with Object:WhateVertheData was that Changed];这样子控制器实际上不知道什么叫它。我现在感觉自己像一只拿着猎枪的猴子。到目前为止,还没有人被杀。:)