我刚开始使用XCode(v3.2.2)和Interface Builder而遇到了问题。
这就是我所做的:
我已经使一个类成为NSTableView的数据源:
@interface TimeObjectsDS : NSControl {
IBOutlet NSTableView * idTableView;
NSMutableArray * timeObjects;
}
@property (assign) NSMutableArray * timeObjects;
@property (assign) NSTableView * idTableView;
- (id) init;
- (void) dealloc;
- (void) addTimeObject: (TimeObj *)timeObject;
// NSTableViewDataSource Protocol functions
- (int)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView
objectValueForTableColumn:(NSTableColumn *)tableColumn row:
(int)row;
@implementation TimeObjectsDS
@synthesize timeObjects;
@synthesize idTableView;
-(id) init {
if (self = [super init]) {
self.timeObjects = [[NSMutableArray alloc] init];
TimeObj *timeObject = [[TimeObj alloc] init];
[timeObject setProjectId:11];
[timeObject setDescription:@"Heja"];
[timeObject setRegDate:@"20100331"];
[timeObject setTimeSum:20.0];
[timeObjects addObject:timeObject];
[timeObject release];
[idTableView reloadData];
}
return self;
}
- (void) dealloc {
[idTableView release];
[timeObjects release];
[super dealloc];
}
// Functions
- (void) addTimeObject: (TimeObj *)timeObject {
[self.timeObjects addObject:timeObject];
[idTableView reloadData];
}
// NSTableViewDataSource Protocol functions
- (int) numberOfRowsInTableView:(NSTableView *)tableView {
return [self.timeObjects count];
}
- (id) tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row {
return [[timeObjects objectAtIndex:row] description];
}
@end
然后我将View中的NSTableView绑定到此数据源,如下所示:
alt text http://www.og-entertainment.com/tmp/ib_datasource_bindings_big.png
我还将View NSTableView绑定到上面的Interface Builder中的Controller idTableView变量
在init函数中,我向可变数组添加了一个元素。当我运行应用程序时,这在NSTableView中正确显示。但是,当我向数组添加另一个元素(与init中的类型相同)并尝试在View上调用 [idTableView reloadData] 时,没有任何反应。 实际上,Controller idTableView为null。使用 NSLog (@“idTableView:%@”,idTableView)打印变量时,我得到“ idTableView :( null)”
我想出了如何解决这个问题。我可以做些什么来修复绑定?
答案 0 :(得分:1)
如果控制器中的tableview出口为空,则表示尚未在Interface Builder中连接它。上面的屏幕截图显示了与TimeObjectsDS
的连接,但这并不意味着很多 - 是您正在调用reloadData
的实例吗?例如,您可能有多个此类的实例。
这只是一种可能性。没有更多代码,列出更多代码是不可行的。
顺便说一句,在MVC中,将模型对象直接连接到视图是一件坏事。您可能只是错误地使用了术语。