我正在使用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时,将触发断言。
答案 0 :(得分:0)
解决方法是将QLPrewiewView
的{{1}}属性设置为shouldCloseWithWindow
。
我怀疑这告诉幕后的控制者不要将自己附加到更高层次的结构上,即告诉它保持自给自足。
因此,将这行代码添加到在示例代码的NO
文件中设置新的MyPrewiewView
对象的代码中可以防止发生错误:
ViewController.m