处理多个NSTableView的最佳方法

时间:2009-02-02 21:37:42

标签: cocoa

在不使用Cocoa绑定的情况下,什么被认为是处理多个NSTableView的最佳方法?

在我的应用程序中,我有两个NSTableViews足够密切相关,我使用的是与委托和数据源相同的对象。问题是tableViews调用相同的方法。我目前在NSControl -tag的基础上区分两个tableView。

我深入研究这段代码,使用-tag看起来更加丑陋。我最终创建了大量重复的代码来区分每个委托/ dataSource方法中的tableViews。代码最终明显是非面向对象的。

我可以创建一个单独的对象来处理一个或另一个tableView,但是创建所述对象将是一个很大程度上是人为的构造,只是为了提供一个独特的委托/ dataSource。

现在每个人都只使用Cocoa Bindings吗?我正在避免使用Bindings,因为我想在Mac OS和iPhone之间可以转移的技术上磨练我的Cocoa技能。

3 个答案:

答案 0 :(得分:10)

NSTableView的每个delegate / dataSource方法都传递NSTableView的实例,该实例将其作为第一个参数调用(传递NSNotification对象的实例除外,在这种情况下,NSNotification的object是表视图实例)。一些例子包括:

- (int)numberOfRowsForTableView:(NSTableView*)aTableView;

- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn*)aTableColumn row:(NSInteger)rowIndex

- (void)tableViewSelectionDidChange:(NSNotification *)aNotification

如果您使用一个控制器对象作为多个表的委托/数据源,则可以使用该参数来区分它们。

答案 1 :(得分:3)

方法:

- (void)tableViewSelectionDidChange:(NSNotification *)aNotification

你可以使用:

NSTableView *theTable = (NSTableView *)[aNotification object];
if(theTable==listeDesMots)
 ...

答案 2 :(得分:2)

听起来你应该为每个视图使用不同的委托对象,但是使用相同的数据源。换句话说,用于不同视图和控制器对象的单个模型。

我不认为这是一种人为的区别,因为对象具有完全不同的目的,但您希望使用相同的数据。您现在违反的更大规则是每个对象都应该有一个目的。每个对象的目的可能是以特定方式检索和显示数据。

祝你好运!