0

作为练习,我正在为 iPad 开发一个简单的绘图应用程序。我正在使用UISplitView, 绘图视图作为详细视图。在主视图控制器中,我呈现(在表格视图中)到目前为止绘制的形状列表。

用户可以从主视图控制器编辑或删除任何形状,还可以通过在详细视图控制器中触摸它来选择和编辑形状。

为了通知每个视图控制器另一个所做的更改,我想到了使用委托,但我不确定这是否是正确的使用模式。

首先,据我了解,当某个对象遇到他们不知道如何处理的事件时,应该使用委托。在这种情况下,他们将所有信息传递给委托并让它处理事件。这不是这里的情况,因为两个视图控制器都需要对信息做一些事情。在此处使用委托可能会导致代码重复。

我考虑不使用委托的另一个原因是,将来我可能希望其他视图控制器获取绘图更改的信息。我可以使用多个代表(一般来说这是一种好的做法吗?)但我也不确定这是否是一个好的解决方案。

我应该考虑其他解决方案吗?

4

1 回答 1

0

相反,我认为委托可能是在这里使用的正确模式——您不一定在您无法处理事件时委托(尽管这可能是您要委托的一种情况)。

相反,当您根本不知道该对象可能是什么时,请考虑委托一种从另一个对象获取信息或从另一个对象获取信息的方法。例如,Apple 在使用 UITableViews 时使用委托模式;在那个委托协议中,表格视图非常清楚在每种情况下要做什么,但仍然会在某些操作即将发生时通知您的代码。我认为这与您的情况非常相似。(请注意,在 UITableView “数据源”中也存在与您的问题假设平行的情况,其中表格视图确实需要一些信息。)

如果您真的对代表死心塌地,您可以考虑使用的另一种技术是使用通知。您可以让每个控制器订阅特定的通知,然后让您的形状(或详细视图控制器)在可观察到的更改发生时发布 NSNotification 的实例。这样,您仍然可以处理发生在不同控制器中的事件,但无需维护委托列表。

至于代码重复,只要在遇到重复的情况时考虑重构即可;也许您应该为公共代码设计一个委托或通知订阅者对象,然后只在每个其他控制器中执行特定于类的事情?

于 2012-08-01T16:34:55.507 回答