作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 QLPreviewView 在应用中显示快速预览预览。没有沙箱,效果很好,但是一旦将应用程序更改为沙箱,预览就无法显示。
我在控制台中发现错误:QuickLookUIHelpe(20786) 拒绝文件读取数据 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 加载预览完成之前,以下 api stopAccessingSecurityScopedResource
立即关闭访问,导致 Mac 无法加载预览成功。
所以解决方案是:不要在这里调用stopAccessingSecurityScopedResource
,保持allowedURL的访问权限,直到不需要QL预览功能,然后调用stopAccessingSecurityScopedResource
那里,例如关闭窗口时。
关于macos - QLPreviewView 无法在沙盒中显示快速预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30571120/
我是一名优秀的程序员,十分优秀!