сбой при закрытии документа при привязке через отношение «один к одному»

Среда сборки: Xcode 7 beta 7 OS X: 10.10.5 Swift 2

У меня есть проект, который использует класс BSManagedDocument из github для переноса основных данных в NSDocument. Я использую привязки Cocoa для получения данных из основных данных в NSOutlineView с помощью контроллера NSTree.

Объектная модель довольно проста. Объект (называемый SourceGroup_, привязанный к контроллеру дерева, имеет связь «один ко многим» сам с собой для предоставления иерархических данных для контроллера дерева. Он также имеет необязательную связь «один к одному» с медиа-объектом, который предоставляет URL-адрес для сопутствующие медиа (изображение, видео и т. д.).

Представление схемы имеет три связанных столбца, два из которых привязаны к свойствам основного объекта, а третий представляет собой миниатюру изображения, полученную из отношения мультимедиа «один к одному».

Все отображается нормально, но иногда, когда я закрываю документ, я получаю EXC_BAD_ACCESS в _NSGetUsingKeyValueGetter, который возвращается через NSAutoUnbinder и [выпуск NSTableCellView] обратно через [утечку NSAutoreleasePool]. Это происходит не каждый раз, но иногда случается.

Если я удаляю столбец, связанный отношением один к одному, он никогда не падает. Если я добавлю неосновное свойство данных в SourceGroup, которое просто возвращает изображение из отношения selectedMedia, а затем привязываюсь к этому свойству в SourceGroup, это никогда не приведет к сбою.

Тип поля не имеет значения. Если я связываюсь через отношение, оно (иногда) падает при закрытии, будь то String или NSImage.

Я даже пытался генерировать свои основные объекты данных как Objective C, а не Swift, но это не повлияло на поведение. Независимо от того, что я меняю, одна константа заключается в том, что если я привязываю представление в столбце таблицы через отношение, оно иногда падает при закрытии. Тем не менее, с точки зрения деталей, если я привязываюсь к одним и тем же полям через selectionIndex, это работает нормально и никогда не падает. Сбой происходит только в том случае, если он находится в представлении схемы.

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

Контроллер дерева находится в режиме объекта с объектом, установленным в SourceGroup. Его исходные дескрипторы и контекст управляемого объекта привязаны к моему контроллеру представления.

Содержимое представления схемы привязано к ключу контроллера rangeObjects контроллера дерева. SelectionIndexPaths и дескрипторы сортировки также привязаны к контроллеру дерева.

Значение для NSImageView в столбце привязано к представлению ячейки таблицы с путем к ключу модели, установленным на objectValue.preferredMedia.thumbnail.

Все это отображается правильно, но вызывает периодические проблемы при закрытии документа. Если я добавлю свойство миниатюры изображения в SourceGroup, а затем привяжу это представление изображения к objectValue.thumbnail, я никогда не увижу проблему.

Я не вижу ничего в документах о том, что этот тип установки является проблемой, но я также достаточно новичок в программировании OS X, поэтому я мог что-то упустить.

Может ли кто-нибудь увидеть проблему в том, что я пытаюсь сделать?


person ac4lt    schedule 31.08.2015    source источник


Ответы (1)


У меня была аналогичная проблема с Core Data, древовидным контроллером и изображениями. Контекст управляемого объекта высвобождается до представления структуры и контроллера дерева. Контекст превращает управляемые объекты в ошибки до того, как привязки удалят их наблюдателей. Обходной путь — установить для содержимого древовидного контроллера значение nil, когда окно закроется.

person Willeke    schedule 31.08.2015