Ошибка подтверждения при использовании NSCollectionView с QLPreviewView - PullRequest
0 голосов
/ 03 марта 2019

Я использую NSCollectionView, где каждый NSCollectionViewItem использует QLPreviewView для получения рендеринга содержимого файла.

(Это попытка в файловом браузере для изображений и других просматриваемых файлов.)

Первоначально это работает нормально.

Однако, как только элементы коллекции используются повторно, я получаю ошибку подтверждения (как в 10.13, так и в 10.14):

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

По-видимому, прежде чем я смогу повторно использовать NSCollectionViewItem, ранее использовавшемуся QLPreviewItem необходимо каким-то образом установить в неактивное состояние.Как мне это сделать?

Я пытался отправить сообщение close в экземпляр QLPreviewView, но это не имеет значения.

Я также не получаювызов dealloc для моего подкласса QLPreviewView, который предполагает, что на объект все еще ссылается что-то еще, возможно, QLPreviewDocument, который затем запутывается в изменении состояния.

Я сделал демонстрационный проект доступнымна github: https://github.com/tempelmann/NSCollectionViewWithQLPreview

Для проверки: запустите его, затем прокрутите вниз.При достижении пунктов с 50 по 60 утверждение сработает.

1 Ответ

0 голосов
/ 03 марта 2019

Исправление состоит в том, чтобы установить QLPrewiewView свойство shouldCloseWithWindow в NO.

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

Итак, добавление этой строки в код, который устанавливает новый объект MyPrewiewView в файле ViewController.m примера кода, предотвращает ошибку:

qlView.shouldCloseWithWindow = NO;
...