作为一项练习,我正在为iPad制作一个简单的绘图应用程序。
我正在使用UISplitView
,图纸视图是详细视图。在主视图控制器中,我(在表格视图中)呈现了到目前为止绘制的形状的列表。
用户可以在主视图控制器中编辑或删除任何形状,也可以通过在详细视图控制器中触摸来选择和编辑形状。
为了通知每个视图控制器对方做出的更改,我想到了使用委托,但我不确定这是否是正确的模式。
首先,据我所知,当某个对象遇到一个他们不知道如何处理的事件时,应该使用委托。在这种情况下,他们将所有信息传递给代表并让它处理事件。这不是这里的情况,因为两个视图控制器都需要对信息做一些事情。在这里使用委托会导致代码重复。
我想不使用委托的另一个原因是,将来我可能希望其他视图控制器获取绘图中的更改信息。我可以使用多个代表(这是一般的好习惯吗?)但我不确定这是一个很好的解决方案。
我还应该考虑其他解决方案吗?
答案 0 :(得分:0)
相反,我认为代理可能是在这里使用的正确模式 - 当您无法处理事件时,您不一定只委派 (尽管可能 em>是你委派的一种情况。)
相反,当您只是不知道该对象可能是什么时,请考虑委托从另一个对象获取信息的方式。例如,Apple在使用UITableViews时使用委托模式;在该委托协议中,表视图非常清楚在每种情况下要做什么,但在某些操作即将发生时仍会通知您的代码。我认为这与你的情况非常相似。 (请注意,在UITableView“数据源”中也存在与您的问题假设平行的情况,其中表视图确实需要一些信息。)
您可以考虑使用的另一项技术,如果您真的死对代表,将使用通知。您可以让每个控制器订阅特定通知,然后在发生可观察的更改时让您的形状(或详细视图控制器)发布NSNotification实例。这样,您仍然可以处理在不同控制器中发生的事件,但无需维护委托列表。
至于代码重复,只需考虑重构,因为您开始遇到要复制的情况;也许您应该为公共代码设计一个委托或通知订阅者对象,然后只在每个其他控制器中执行特定于类的事情?