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 通过绑定将NSSearchField连接到NSArrayController的Laggy接口_Cocoa_Filtering_Nsarraycontroller_Binding - Fatal编程技术网

Cocoa 通过绑定将NSSearchField连接到NSArrayController的Laggy接口

Cocoa 通过绑定将NSSearchField连接到NSArrayController的Laggy接口,cocoa,filtering,nsarraycontroller,binding,Cocoa,Filtering,Nsarraycontroller,Binding,因此,我有一个NSSearchField,它通过绑定直接连接到NSArrayController,并连接到filterPredicate,这样,用户无需任何代码,只需键入NSSearchField并过滤界面中呈现给他的NSArrayController中的对象列表(具体来说,是NSCollectionView) NSSearchField被连接起来以提供实时搜索,因此在用户键入时,NSCollectionView会立即被过滤,而不是在等待用户停止键入后的一小段时间 然而,问题是,这使得接口真正滞

因此,我有一个NSSearchField,它通过绑定直接连接到NSArrayController,并连接到filterPredicate,这样,用户无需任何代码,只需键入NSSearchField并过滤界面中呈现给他的NSArrayController中的对象列表(具体来说,是NSCollectionView)

NSSearchField被连接起来以提供实时搜索,因此在用户键入时,NSCollectionView会立即被过滤,而不是在等待用户停止键入后的一小段时间

然而,问题是,这使得接口真正滞后。键入会明显延迟0.5-1秒,而且NSCollectionView似乎正在尝试为用户输入的搜索字符串的每一部分的每一项重新排列设置动画

我希望搜索是实时的,但搜索字段中的键入是流动的,结果要尽可能快地过滤。有没有办法通过绑定来实现这一点,或者我需要在一个单独的线程上输入一些触发filterPredicate的自定义代码


(请注意,我在NSArrayController上设置了一个自定义排序算法,删除它似乎有助于解决延迟问题,但并不完全。)

我肯定会在单独的线程上使用谓词。看来你知道你要做什么。显然,当前线程上的阻塞是延迟问题。

实际上,看起来您无法从单独的线程调用setFilterPredicate:。它引起了碰撞

事实证明,我的问题实际上是由设置过滤器谓词时反复调用一些缓慢的代码引起的,这严重降低了过滤的性能。我在应用程序的Instruments中使用时间分析器工具发现了这一点。这告诉我哪种方法花费的时间最多,优化该方法解决了滞后问题