面向对象的iPhone设计

时间:2011-10-03 03:54:53

标签: iphone

所以我已经碰到了几次,并且是OOD的新手,所以不确定是否有一个好的方法来做到这一点。

但基本上,我有一个MainViewController,然后我推了一个新的DetailViewController。在我的MainViewController中,我有一个Reset方法,基本上将所有内容重置为默认值。

如果我想把按钮调用DetailViewController中的Reset,我怎么调用该方法,因为它在MainViewController类中?

我之前所做的是引用ParentController(在本例中为MainViewController),然后从DetailViewController以这种方式调用它。我不知道这是否是一个很好的做法,如果有更好的方法来做这样的事情。

感谢。

3 个答案:

答案 0 :(得分:0)

您可能希望将MainViewController作为DetailViewController的委托。 Apple的框架在整个地方使用这种模式,因此您可以使用它作为示例。当您执行此类引用时,请确保它不会形成保留周期,否则您可能会泄漏内存;不要保留代表。

答案 1 :(得分:0)

您正在遵循“委托模式”及其中一个非常好的设计。我建议使用相同的方法。您可以查看书籍"Cocoa Design Patterns",它可以让您很好地理解设计模式。

在您的情况下,在DetailsViewController中创建类型为“id”的委托,为其写入属性,并在从主视图中推送DetailsViewController对象时进行设置。然后使用该委托上的“ResondsToSelector”调用该方法。如果您需要代码段,请与我们联系。

答案 2 :(得分:0)

首先,考虑在详细视图中是否有重置按钮是有意义的。从UI组织的角度来看,这可能没有意义,因为从OOD的角度来看,它有点不方便。

好吧,假设您已经确定要使用该按钮。然后在某种意义上,似乎DetailViewController必须知道它所处的更大的上下文。它必须知道有一些东西需要重置。我认为在DetailViewController上为MainViewController指定一个属性并将其声明为MainViewController *是很好的。除非它对于DetailViewController知道它需要重置某些东西,但不是真的知道什么有用,否则我认为你不需要抽象DetailViewController与MainViewController对话这一事实,并留下DetailViewController可能是的可能性另一种父母的孩子。所以你不需要协议。

选项C,您可以拥有一些表示数据模型的对象。我会说它是Thing类的一个实例,并且符合协议ThingModel。你给MainViewController和DetailViewController一个指向ThingModel的指针,即一个声明为id的属性。当他们想要重置时,他们会调用[self.thingModel reset]。

现在,这会重置您的数据,但您如何重置您的观点?许多可能的选择。首先,当DetailViewController调用reset时,下一行可以让DetailViewController执行它需要做的事情来反映数据模型,现在它是空的。也许MainViewController还没有做任何事情,但更新自身以匹配下次显示时的数据模型。

相关问题