将NSCollectionView与QLPreviewView结合使用时出现断言错误

时间:2019-03-02 21:30:14

标签: macos nscollectionview quicklook

我正在使用NSCollectionView,其中每个NSCollectionViewItem都使用QLPreviewView来呈现文件内容。

(这是尝试在文件浏览器中查找图像和其他可预览文件的方式。)

最初,这很好。

但是,一旦收集项被重新使用,我会得到一个断言错误(在10.13和10.14中均如此):

[QL] Assertion failure (unreachable code) - [… MyPreviewView activated … doc:[QLPreviewDocument …]] is already activated

显然,在我可以重新使用NSCollectionViewItem之前,需要将先前使用的QLPreviewItem设置为 inactive 状态。我该怎么办?

我尝试将close消息发送到QLPreviewView实例,但这没有什么区别。

我也没有在我的QLPreviewView子类上进行dealloc调用,这表明该对象仍被其他对象(可能是QLPreviewDocument)引用,然后对状态更改感到困惑。

我已经在github上提供了一个演示项目:https://github.com/tempelmann/NSCollectionViewWithQLPreview

要测试:运行它,然后向下滚动。当达到项目50到60时,将触发断言。

1 个答案:

答案 0 :(得分:0)

解决方法是将QLPrewiewView的{​​{1}}属性设置为shouldCloseWithWindow

我怀疑这告诉幕后的控制者不要将自己附加到更高层次的结构上,即告诉它保持自给自足。

因此,将这行代码添加到在示例代码的NO文件中设置新的MyPrewiewView对象的代码中可以防止发生错误:

ViewController.m