NSTableView绑定问题

时间:2010-04-29 12:21:44

标签: objective-c xcode cocoa-bindings

我刚开始使用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)

我想出了如何解决这个问题。我可以做些什么来修复绑定?

1 个答案:

答案 0 :(得分:1)

如果控制器中的tableview出口为空,则表示尚未在Interface Builder中连接它。上面的屏幕截图显示了与TimeObjectsDS的连接,但这并不意味着很多 - 是您正在调用reloadData的实例吗?例如,您可能有多个此类的实例。

这只是一种可能性。没有更多代码,列出更多代码是不可行的。

顺便说一句,在MVC中,将模型对象直接连接到视图是一件坏事。您可能只是错误地使用了术语。