【问题标题】:iPhone: how to pass data back and forth between Parent view controller and Detail View controlleriPhone:如何在父视图控制器和详细视图控制器之间来回传递数据
【发布时间】:2011-05-07 00:26:55
【问题描述】:

我有一个 iphone 应用程序,它有一个包含一些数据的父视图控制器。我点击其中一行并将 Detail VC 推送到堆栈上,我想在其中编辑父级的数据。当我弹出详细视图时,父视图应该会看到更改的数据。

实现这一目标的最简单和最好的方法是什么?我知道我可以:a)进入视图控制器链并直接编辑父数据(-混乱),b)在弹出详细信息视图时使用委托回调(-麻烦),c)发送通知(-工作太多) .

必须有一些更简单的东西,可能使用属性将完全相同的指针从父视图传递到详细视图,以便详细视图与父视图作用于相同的确切数据?这样,Detail 视图在从堆栈中弹出时无需执行任何操作。

【问题讨论】:

    标签: iphone objective-c


    【解决方案1】:

    是的,它称为模型-视图-控制器。您确实希望将数据存储到另一个类中,称为模型。需要知道模型更改的对象应该被告知模型的更改,这可以通过键值观察或委托来完成。在这种情况下,您的父视图控制器将订阅模型中的更改。当数据发生变化时,父视图控制器会收到通知,并刷新他的表。如果父级当前不可见,您可以暂停这些更新并在父级可见时刷新它。

    【讨论】:

      【解决方案2】:

      在我现在正在进行的一个项目中,我创建了一个名为“DataServices”的类。 DataServices 对象在“applicationDidFinishLaunching”期间仅实例化一次:

      ds = [[DataServices alloc] init];
      ds.managedObjectContext = self.managedObjectContext;
      [ds initialize_data];
      

      任何需要数据的模块都声明如下:

      extern DataServices *ds;
      

      ...并且可以根据需要免费访问常见的应用程序数据。读。写。调整。抽象完成。我可以对数据的编码、存储和来源做任何我想做的事情,并且与需要数据服务的各种模块的接口不会改变。适合我正在做的事情。也许这对你有用。

      就检测类与类的变化而言。我在 DataServices 中有一个名为“已修改”的标志。例如,在显示可以进行更改的新视图控制器之前,此标志会被清除。 DataServices 中的任何“设置”或“更新”成员函数都将设置此标志。有了这个:

      if(ds.modified)
      {
      // Do what you have to do if data is modified
      }
      

      可以根据需要为一组设置设置标志,您不一定需要一个单一的万能修改标志。标志也可以很复杂。您可以有一个仅在特定数据达到阈值时触发的标志,等等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多