2009-02-02 97 views
6

什么被认为是不使用Cocoa绑定来处理多个NSTableViews的最佳方式?处理多个NSTableView的最佳方式

在我的应用程序,我有两块十分密切相关,我使用了相同的对象委托和数据源两个NSTableViews。问题是两个tableView都调用相同的方法。我目前基于NSControl -tag区分两个tableViews。

我进入这个代码越深,使用-tag容貌的丑陋。我最终创建了大量重复的代码来区分每个委托/数据源方法中的tableViews。代码最终明确地不是面向对象的。

我可以创建一个单独的对象来处理一个或其他的tableView,但表示对象的创建将在很大程度上人工构建只需提供一个不同的委托/数据源。

现在每个人都在使用Cocoa Bindings吗?我正在避免Bindings,因为我希望通过可在Mac OS和iPhone之间转换的技巧来磨练我的Cocoa技能。

回答

10

NSTableView的每个委托/数据源方法都将N​​STableView的实例作为第一个参数(除了那些通过NSNotification对象的情况外,在这种情况下NSNotification的object是表视图实例)。一些例子包括:

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

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

- (void)tableViewSelectionDidChange:(NSNotification *)aNotification

如果你正在使用一个控制器控制对象为多个表的委托/数据源,你可以使用该参数来区分他们。

+0

我目前使用的NSControl - 标签方法,发送给你指出的tableView的说法,到tableViews区分。使用-tag似乎比使用tableView参数本身更确定一些,因为我必须将参数与某些内容进行比较以确定tableView。 – 2009-02-02 22:56:35

+2

是的,通常情况下,您还可以在IB中设置从您的控制台到桌面视图的网点,因此您可以将传入的表格视图与您的网点进行比较,以确定哪个是哪个网点。 – 2009-02-04 06:03:50

2

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

我不认为这是一个人为的区分,因为对象有足够不同的目的,但要使用相同的数据。你现在违反的规则越大,每个对象应该有一个目的。每个对象的目的可能是以特定方式检索和显示数据。

祝你好运!

3

的方法:

- (void)tableViewSelectionDidChange:(NSNotification *)aNotification 

你可以使用:

NSTableView *theTable = (NSTableView *)[aNotification object]; 
if(theTable==listeDesMots) 
... 
相关问题