2011-06-16 108 views
0

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

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

  • 我可以创建一个新的对象来保存所有这些属性并通过它。

  • 我可以在代理方法[self.delegate didClickDone:self]中传递控制器。这种方法的问题是:我是否允许从外部访问另一个控制器的网点?

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

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

回答

1

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

如果有多个值传递我会去

  • 阵列如果包含传递的对象是同一类型/类型的
  • 使用一个数据类别如果这些值本质上是异构的。像M.Fowler的Refactoring - >介绍参数对象(第295页)。

正如您所建议的那样,肮脏的方法是将视图控制器本身的其他实例打开出口。防止其他类的多孔行为。

+0

那么,对象基本上是混合的。它们只是控制器拥有的窗口中的数据。有些是字符串,一些数字和一些BOOL。我猜我应该创建一个名为“Parameters”的新对象并将其传递给委托方法? 将参数对象传递给程序的模型也是明智的吗?因为这是其他控制器中的委托方法最终会做的事情。 – saad 2011-06-16 15:36:54

+0

@Saad Abbasi我甚至会去:更新模型,然后不要将数据作为对象或数组传递,并让其他实例访问模型!由于模型应该保持当前状态。 – 2011-06-16 15:41:15

+0

尝试理解你在这里所说的内容:而不是传递'parameter',我应该在控制器中拥有一个指向程序模型的属性。一旦控制器从窗口获得值,它应该直接通知模型,而不是通过其他控制器?我觉得我完全偏离了这里,并不理解你的意思。准确地说,我有两个控制器:'SheetController'和'AppController'。前者的目的是处理表单并将数据返回给调用表单的人员,我通过代表执行此操作。 – saad 2011-06-16 15:53:38

相关问题