Objective c 如何从NSTableView中删除所有NSTableColumns?
我正在尝试实现一种方法来清除所有项和列的NSTableView。但当我尝试实现以下内容时,我遇到了崩溃:Objective c 如何从NSTableView中删除所有NSTableColumns?,objective-c,cocoa,nstableview,Objective C,Cocoa,Nstableview,我正在尝试实现一种方法来清除所有项和列的NSTableView。但当我尝试实现以下内容时,我遇到了崩溃: - (void)clearResultData { [resultArray removeAllObjects]; NSArray *tableCols = [resultTableView tableColumns]; if ([tableCols count] > 0) { id object; NSEnumerato
- (void)clearResultData
{
[resultArray removeAllObjects];
NSArray *tableCols = [resultTableView tableColumns];
if ([tableCols count] > 0)
{
id object;
NSEnumerator *e = [tableCols objectEnumerator];
while (object = [e nextObject])
{
NSTableColumn *col = (NSTableColumn*)object;
[resultTableView removeTableColumn:col];
}
}
[resultTableView reloadData];
}
如果有任何帮助,您可以删除所有列,如下所示:
- (void)removeAllColumns
{
while([[tableView tableColumns] count] > 0) {
[tableView removeTableColumn:[[tableView tableColumns] lastObject]];
}
}
tableColumns
返回的NSArray由removeTableColumn
更改。不要假设它是不变的
尽管它是作为不可变的NSArray返回的,但底层实现正在被修改,因此将NSEnumerator用于已修改的集合是不安全的。在while循环中,您正在向其当前对象刚刚被删除的枚举器发送nextObject消息,因此可能会发生不好的事情
下面是一个更高效的实现:
NSTableColumn* col;
while ((col = [[tableView tableColumns] lastObject])) {
[tableView removeTableColumn:col];
}
tableView.tableColumns.forEach({tableView.removeTableColumn($0)})
当表视图中没有列时:tableColumns返回空数组,空数组上的lastObject返回nil,col被赋值为nil,条件为false,while循环结束。下面是一个快速实现:
NSTableColumn* col;
while ((col = [[tableView tableColumns] lastObject])) {
[tableView removeTableColumn:col];
}
tableView.tableColumns.forEach({tableView.removeTableColumn($0)})
控制台中是否有崩溃消息?