我使用QLPreviewView在应用程序中显示quicklook预览。如果没有沙盒,则效果很好,但是将应用程序更改为沙盒后,预览将无法显示。
我在控制台中发现错误: QuickLookUIHelpe(20786) deny file-read-data XXX.
我使用了安全范围内的书签和com.apple.security.files.user-selected.read-write授予访问用户主目录的权限,然后:
[allowedURL startAccessingSecurityScopedResource];
self.myPreiviewItem.myURL = fileURL;
self.myQLPreviewView.previewItem = self.myPreiviewItem;
[self.myQLPreviewView refreshPreviewItem];
[allowedURL stopAccessingSecurityScopedResource];
有了这些,我可以删除用户主目录的文件,但是QLPreviewView无法工作。我不知道这两个场景之间有什么区别,QLPreviewView是否需要更多用于沙箱的场景?
如果我将com.apple.security.files.downloads.read-only添加到权利中,则可以预览“下载”中的文件,但不能预览用户主目录的其他文件。
终于我找到了解决方案!
refreshPreviewItem
是一个异步调用,因此在Mac完成加载预览之前,以下apistopAccessingSecurityScopedResource
立即关闭了访问权限,因此Mac无法成功加载预览。
所以解决的办法是:不要不叫stopAccessingSecurityScopedResource
这里,保持allowedURL的访问权,直到你不需要QL预览功能,然后调用stopAccessingSecurityScopedResource
有的,比如关闭窗口时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句