【问题标题】:Passing Data To Delegate将数据传递给委托
【发布时间】:2011-06-16 15:25:22
【问题描述】:

我在一个控制器对象中有一堆出口,需要传递另一个控制器。如果只有 2 或 3 个值,我只需将它们作为参数传递给委托方法(不是直接传递给出口,而是通过将值复制到变量)

但是,有不少。处理这个问题的最佳方法是什么?我看到了三种方法:

  • 我可以创建一个包含所有这些属性的新对象并将其传递。

  • 我可以在委托方法[self.delegate didClickDone:self] 中传递控制器。这种方法的问题是:我可以从外部访问另一个控制器的插座吗?

  • 我可以遵循第二个选项,但将每个插座的值复制到一个属性,并允许其他控制器通过访问器方法访问它们。

解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: objective-c cocoa model-view-controller delegates


    【解决方案1】:

    你总是被允许做你自己允许的事情。但是,某些方法可能会阻止 Apple 接受您的 App 进入 Appstore。这不是这里的情况;)

    如果要传递的值很多,我会选择

    • 一个数组,如果包含的传递对象是相同的类型/种类
    • 如果值本质上是异构的,请使用数据类。就像 M.Fowler 在 Refactoring 中一样 -> 引入参数对象(第 295 页)。

    按照您的建议,肮脏的方式是向视图控制器本身以外的其他实例打开 Outlets。防止其他类的那种爱管闲事的行为。

    【讨论】:

    • 嗯,对象基本上是混合的。它们只是控制器拥有的窗口中的数据。有些是字符串,有些是数字,有些是 BOOL。我猜我应该只创建一个名为“Parameters”的新对象并将其传递给委托方法?将parameters 对象也传递给程序模型是否也是明智之举?因为这就是另一个控制器中的委托方法最终会做的事情。
    • @Saad Abbasi 我什至会去:更新你的模型,然后不要将数据作为对象或数组传递,让你的其他实例访问模型!因为模型应该保持当前状态。
    • 试图理解你在这里所说的话:我应该只在控制器中有一个指向程序模型的属性,而不是传递parameter。一旦控制器从其窗口中获取值,它应该直接通知模型而不是通过另一个控制器?我觉得我在这里完全脱离了基地,不明白你的意思。准确地说,我有两个控制器:SheetControllerAppController。前者的目的是处理工作表并将数据返回给调用工作表的人,而我是通过委托来完成的。
    • @Saad Abbasi 好的。我的意思是,如果您有一个无论如何都要更新的模型,请先执行此操作,然后让需要数据的其他控制器“询问”该模型,不要将数据传递两次。但是我认为在这种情况下使用委托看起来是一个好方法。
    猜你喜欢
    • 2018-05-07
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 2015-07-07
    • 2016-09-03
    相关资源
    最近更新 更多