我正在阅读关于Objective-c的一本书并了解撤消管理器。这个概念看起来很简单,但提供的例子似乎过于复杂。基本上,我有一个表视图连接到一个NSArrayController,我添加或删除人员到一个数组,我可以编辑他们的名字和东西。因为该示例使用NSArrayController和绑定,所以添加和删除是自动的,并且所有的编辑都是自动的。Objective-C撤消管理器问题
要使用撤消管理器,从我的理解,我需要实现我自己的方法来添加/删除/编辑。
我实现做了添加和删除,并得到应有的关键值编码自动调用这些方法:
- (void)removeObjectFromEmployeesAtIndex:(int)index;
- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index;
然后进行编辑,我必须注册类作为观察员,观察变化编辑:
- (void)changeKeyPath:(NSString *)keyPath
ofObject:(id)obj
toValue:(id)newValue
这里是我的问题:
为什么我公顷有做这么多?我的理解是,使用NSArrayController和绑定应该使添加/删除/编辑项目变得更容易和更自动化。但是,如果我必须手动实现所有这些方法,只需添加撤销支持,为什么要使用NSArrayController或绑定呢?
背后发生了什么?在Interface Builder中,添加按钮连接到NSArrayController上的add方法。那么我的insertObject方法如何被调用?我知道这是通过关键的值编码,但是什么使得NSArrayController的add方法被重写仅仅是b/c我的文档实现了这个方法?
该解决方案是不对称的。我使用一个概念来处理撤消添加/删除以及另一个概念来处理撤消编辑。我不能只观察对数组的更改吗?我想这会使观察值关键字方法复杂化,但是这会更有意义吗?
你使用的是核心数据? – 2011-06-12 18:35:42
不,我还没有了解到这一点,但 – JPC 2011-06-12 22:59:15
你通过在Core Data之前学习这一点而节省了很多痛苦;那么它会变得更有意义。我可以提供的一点建议是,你可以在Cocoa/Xcode中找到非常方便使用的东西,但是你经常需要解决。一个具体的例子是使用IB来创建GUI--做,复杂的事情会变得无用(对于动画等),并且你必须得到幕后(IB在CoreData为你的问题做了改进)。似乎你现在已经看到了其中一种情况。我的观点是:如果你觉得自己在做一些艰难的事情,它可能仍然是最好的/正确的方式。Goodluck – Nektarios 2011-06-15 16:02:17