【问题标题】:How to pass data between viewcontrollers如何在视图控制器之间传递数据
【发布时间】:2012-03-11 21:29:51
【问题描述】:

此时我有一个相当复杂的应用程序,感觉好像我处理数据的方式不符合标准。

所以我已经开始采取一些措施来使我的应用程序对 MVC 更友好。 首先,我已经从所有 ViewController 中的内联解析器方法转变为创建一个专用的解析器类。

调用起来并不难,我只是设置了类,然后调用了我创建的初始化方法,我将数据传递给我的请求。我的对象类中的所有东西都很好用,我从我正在解析的服务器.. 但是这就是我迷路的地方。

如何将数据返回给调用它的 ViewController?我在协议和委托方面做了一些工作。但我不知道这将如何适应。

这是我想要实现的图形示例。

如上视图控制器调用连接到数据库的对象类的初始化方法下载数据,然后解析该数据。我遇到的问题是如何将这些数据获取到 ViewController2..

什么是最合适和最适合未来的方法?

【问题讨论】:

    标签: iphone ios nsobject nsviewcontroller


    【解决方案1】:

    自定义的 -init 方法可以创造奇迹。例如,我需要实例化并推送一个预加载了前一个屏幕中的数组的选择器,所以我在第二个视图中定义了-(id)initWithArray:(NSArray*)array,然后只调用secondView = [[SecondView alloc]initWithArray:_population]; 然后推送它。请记住在释放和销毁之前获取您传递的任何对象的所有权!

    【讨论】:

    • 获得所有权意味着什么?...感谢您的回复,现在就尝试一下。
    • 就像,当您传递所述数组时,从技术上讲,您并不拥有它,因此在第二个视图中,您必须设置一个新的 NSArray 对象,该对象等于在方法中传递的那个。跨度>
    • 好吧,完美..虽然是这样,但想确定一下。好的,谢谢您的回答,一旦时间到了,就会标记它:)
    【解决方案2】:

    如果您想将数据从您的对象广播到所有视图控制器,最好的方法是通过通知 (NSNotificationCenter)。您还可以在解析器对象中编写带有完成块的方法。

    【讨论】:

      【解决方案3】:

      尝试使用 NSNotificationCenter 发送本地通知。将您的 ViewController2 注册为侦听器,然后在收到通知后,为数据调用您的数据模型(单例!?)。

      【讨论】:

      • 我不喜欢 NSNotificationCenter 和代表团一样多……它提醒我必须以草稿语言处理不可靠发送的事件……然后如果你忘记了关键是什么事件是,你必须四处寻找它......
      • 但这正是 NSNotificationCenter 存在的确切目的。除非你想制作一个单例视图控制器(不好的做法),否则你会想要使用它。
      猜你喜欢
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多