Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSTableView:使用蒙特卡罗模拟找出列宽?_Cocoa_Nstableview_Montecarlo - Fatal编程技术网

Cocoa NSTableView:使用蒙特卡罗模拟找出列宽?

Cocoa NSTableView:使用蒙特卡罗模拟找出列宽?,cocoa,nstableview,montecarlo,Cocoa,Nstableview,Montecarlo,NSTableView声明此可选委托方法: - (CGFloat)tableView:(NSTableView *)tableView sizeToFitWidthOfColumn:(NSInteger)column; 实现它很容易,但是当您的表中充满了数千个条目时,您就会看到性能问题,调用此方法会使应用程序无响应 以下是有关实现该方法的文档说明: 如果要控制列的宽度,请实现此方法 当用户双击调整分隔符时。默认情况下, NSTableView迭代表中的每一行,通过 preparedCellAt

NSTableView声明此可选委托方法:

- (CGFloat)tableView:(NSTableView *)tableView sizeToFitWidthOfColumn:(NSInteger)column;
实现它很容易,但是当您的表中充满了数千个条目时,您就会看到性能问题,调用此方法会使应用程序无响应

以下是有关实现该方法的文档说明:

如果要控制列的宽度,请实现此方法 当用户双击调整分隔符时。默认情况下, NSTableView迭代表中的每一行,通过 preparedCellAtRow:column:,并请求cellSize以查找 使用合适的最大宽度

对于较大的行数,进行蒙特卡罗模拟,而不是对每行进行交互。对于性能和准确结果,它是 建议在使用大型表时实现此方法

所以我开始在网上爬行,搜索蒙特卡罗模拟

我现在对蒙特卡罗模拟有了一个简单的了解, 但我不明白它如何适用于这个特殊的问题


我的意思是,最大内容大小是完全随机的。它不会遵循任何方程式或规则,它完全基于将插入单元格的内容,因此蒙特卡罗方法在这里如何应用,它将如何帮助我找到适当的内容大小?

蒙特卡罗:不测量列中的每个单元格,只测量一组随机单元格,发现的最大测量值被视为列的最大宽度。 当然,这不会产生最大单元格宽度。但在大多数情况下,这可能非常接近。考虑到该方法的目的,也就是双击resize分隔符来调整列的大小,这个错误并没有什么大不了的。如果你想要精确的值,你不应该指望这个方法


顺便说一句,你为什么要实施这样的方法?

你问题的最后一部分最好是作为对原始帖子的评论。好吧,如果是这样的话,它比我想象的要简单。我想实现这一点,因为我现在处理它的方法是测量每个单元格的简单方法:当你有十列,比如说一千行时,它可能非常昂贵。苹果使用蒙特卡罗的本地实现速度非常快。我会试试你的建议。@BenRhayader问题是苹果的方法已经做到了我所描述的。除非需要其他行为或估算方法,否则不需要覆盖它