在不使用Cocoa绑定的情况下,什么被认为是处理多个NSTableView的最佳方法?
在我的应用程序中,我有两个NSTableViews足够密切相关,我使用的是与委托和数据源相同的对象。问题是tableViews调用相同的方法。我目前在NSControl -tag的基础上区分两个tableView。
我深入研究这段代码,使用-tag看起来更加丑陋。我最终创建了大量重复的代码来区分每个委托/ dataSource方法中的tableViews。代码最终明显是非面向对象的。
我可以创建一个单独的对象来处理一个或另一个tableView,但是创建所述对象将是一个很大程度上是人为的构造,只是为了提供一个独特的委托/ dataSource。
现在每个人都只使用Cocoa Bindings吗?我正在避免使用Bindings,因为我想在Mac OS和iPhone之间可以转移的技术上磨练我的Cocoa技能。
答案 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)
听起来你应该为每个视图使用不同的委托对象,但是使用相同的数据源。换句话说,用于不同视图和控制器对象的单个模型。
我不认为这是一种人为的区别,因为对象具有完全不同的目的,但您希望使用相同的数据。您现在违反的更大规则是每个对象都应该有一个目的。每个对象的目的可能是以特定方式检索和显示数据。
祝你好运!