Среда сборки: 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, поэтому я мог что-то упустить.
Может ли кто-нибудь увидеть проблему в том, что я пытаюсь сделать?