【问题标题】:Cocoa Touch App Architecture - MVC controller?Cocoa Touch App Architecture - MVC 控制器?
【发布时间】:2010-10-29 20:29:12
【问题描述】:

我对 Cocoa 和 iPhone 编程很陌生。

我正在使用 Xcode Utility Application 模板来实现一个简单的应用程序,该应用程序具有:

  • 带有文本字段的视图,用于收集用户名
  • 带有连接按钮的视图,用于使用 通过 HTTP 获取一些数据的用户名。数据将在屏幕上显示为文本字符串。

我认为这代表了我在 MVC 模式中的 VIEW

我创建了一个简单的类来存储用户名并完成代表我的 MODEL 的所有连接工作,并在 AppDelegate 中对其进行实例化。

这是一个非常简化的草图:

我不太清楚如何将数据嵌套到子视图(用户名)深处,或者如何触发嵌套父视图中的操作(连接按钮)。

我的问题是:

实现此架构的最佳/最简洁的方式是什么?

如何实现 CONTROLLER

提前感谢您的帮助,
保罗

【问题讨论】:

    标签: cocoa cocoa-touch model-view-controller controller


    【解决方案1】:

    根据评论更新我的答案:

    在大多数情况下,控制器中有状态是可以的。就像您正在为其编写应用程序的任何模型对象的数组或实例一样。

    我会保持模型对象没有任何网络代码,并将其放在控制器中。在这种情况下,触发该连接操作的 ViewController。

    原答案:

    我不太清楚我该怎么做 获取嵌套在深处的数据 子视图(用户名)或者我怎么能 在嵌套父级中触发操作 视图(连接按钮)。

    使用实用程序模板,您已经拥有了几个 ViewController。

    要在控制器中获取对 UI 的引用,您需要声明 IBOutlets 并在 Interface Builder 中连接它们。要响应操作,您需要在 ViewControllers 中声明和实现 IBActions,并将它们连接到 Interface Builder 中。您在检查器的“连接”窗格(左起第二个)中执行的操作。

    【讨论】:

    • 我可以使用 IBOutlets 和 IBActions 将 UI 元素链接到直接父视图控制器。我不明白如何将数据传播到包含我的模型对象的应用程序委托的上层容器......
    • 在应用程序委托中保留状态或数据可以工作,但不是一个好的架构,因为它始终可用(使用 [NSApplication 委托])它很容易导致代码对这个全局对象做出假设,即.不可重复使用。对于较小的应用程序可能没问题。
    • 感谢您的回答!对于我的简单应用程序来说,将模型实例放在根控制器中是可以的,这样它就可以到达两个子视图(文本字段和连接按钮+标签)。我还将按照您的建议清理网络。我想知道如何处理具有真正嵌套视图的更复杂的架构。是否需要一个单例模型以便可以从整个应用程序访问它? (我不喜欢这种方法)或者您可能必须从下到上传播数据,调用父视图方法或发送某种事件通知?
    • 在 iPhone 上,我们非常鼓励您为每个“屏幕内容”使用一个 UIViewController。因此,如果可能,在连接到其 ViewController 或其任何子视图的视图中发生的任何事情都应该理想地封装到该 ViewController。现在,对于一个重要的应用程序,我会将实用程序模板中的 AppDelegate 重命名为 ApplicationController,仍然将其保留为委托,但更清楚地说明它的用途。然后我将在应用程序中对 ViewControllers 的引用放在那里。但尽可能将状态保留在 ViewControllers 中。
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多