0

NStableView用 tableView 控制器填充了我的,它工作正常。我只想知道为什么每当用户将鼠标悬停在表格视图中的特定单元格上时,每次我获取数据(在表格单元格中呈现)时,它就会开始在控制台中显示数据。

我发现- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row每次都会调用这个,并且我使用仪器进行堆栈跟踪,这种方法占用了大量内存。

有什么办法可以阻止这种方法每次都绘制数据。

4

1 回答 1

0

将委托 -viewWillMoveToWindow 添加到包含表的视图子类。这里我使用了BOOL名为reloadTable. NSTrackingArea是您问题的答案

- (void) viewWillMoveToWindow:(NSWindow *)newWindow
{
    // Setup a new tracking area when the view is added to the window.
    NSTrackingArea* trackingArea = [[NSTrackingArea alloc] initWithRect:[yourTable frame]
                options: (NSTrackingMouseEnteredAndExited |  
                NSTrackingActiveAlways|NSTrackingEnabledDuringMouseDrag) owner:self userInfo:nil];
    [self addTrackingArea:trackingArea];

}

- (void) mouseEntered:(NSEvent*)theEvent {
    reloadTable=YES;
    NSLog(@"enter %@",theEvent);

}

- (void) mouseExited:(NSEvent*)theEvent {

     reloadTable=YES;

}

然后在你的NSTableViewDataSource方法中使用它

于 2012-11-21T04:51:58.053 回答