QLPreviewView не может отображать предварительный просмотр быстрого просмотра в песочнице

Я использую QLPreviewView, чтобы показать предварительный просмотр быстрого просмотра в приложении. Без песочницы это работает хорошо, но как только вы измените приложение на песочницу, предварительный просмотр не может отображаться.

Я нашел ошибку в консоли: 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 не может работать. Я не знаю, в чем разница между этими 2 сценами, нужно ли QLPreviewView больше для песочницы?

Если я добавлю com.apple.security.files.downloads.read-only в право, файлы в «Загрузках» можно будет просмотреть, но другие файлы домашнего каталога пользователя нельзя будет просмотреть.


person GoKu    schedule 01.06.2015    source источник
comment
в чем разница между fileURL и AllowURL?   -  person mahal tertin    schedule 02.06.2015
comment
allowURL просто представляет каталог, предоставленный com.apple.security.files.user-selected.read-write, например, домашний каталог пользователя, в то время как fileURL — это файл для предварительного просмотра, и он находится в предоставленный реж.   -  person GoKu    schedule 02.06.2015


Ответы (2)


Наконец-то я нашел решение!

refreshPreviewItem — это асинхронный вызов, поэтому, прежде чем Mac завершит загрузку предварительного просмотра, следующий API stopAccessingSecurityScopedResource немедленно отключит доступ, в результате чего Mac не удалось успешно загрузить предварительный просмотр.

поэтому решение таково: НЕ вызывайте stopAccessingSecurityScopedResource здесь, сохраняйте права доступа по разрешенному URL до тех пор, пока вам не понадобится функция предварительного просмотра QL, а затем вызывайте stopAccessingSecurityScopedResource там, например, при закрытии окна.

person GoKu    schedule 04.06.2015

Я столкнулся с этой или, по крайней мере, похожей проблемой некоторое время назад (в Mavericks).

Вот почему я начал запрашивать у пользователей доступ к родительским папкам файлов, которые они хотят просмотреть. Не стесняйтесь посмотреть, как я это делаю в этом моем приложении, версия 1.1 на момент написания этой статьи. Просто зайдите в Chikoo → Настройки… → Доступ к папке. Вот два скриншота:

Скриншот 1Скриншот 2

Признаюсь, это не лучшее решение. Это компромисс, который я придумал, чтобы обойти проблему.

person Shlok Datye    schedule 02.06.2015
comment
Я также попросил у пользователя доступ к домашней папке пользователя, но все равно не работает ~~ - person GoKu; 03.06.2015