Обновление: этот поток определяет ошибку в NSCollectionView, когда представленные объекты представления коллекции являются NSManagedObjects.Ошибка вызывается следующим образом:
(a) Удалить объекты из NSArrayController (b) Выполнить сохранение в связанном nsmanagedobjectcontext в любое время после удаления и до того, как NSCollectionView завершит анимацию.
Эти проекты на github демонстрируют проблему.
https://github.com/artifacts/NSCollectionViewCoreDataBug https://github.com/iracooke/CoreDataCollectionViewCrashing
Исходный вопрос ниже
У меня есть настройка NSCollectionView с привязкой содержимого, привязанной к selectedObjects NSArrayControllerосновных данных объектов.В моем Представлении Элемента Коллекции (прототип для представления NSCollectionView) у меня есть несколько элементов управления, связанных с помощью представляемого объекта моего элемента коллекции с объектами базовых данных.
По большей части это работает нормально.
Я сталкиваюсь с исключением objc_exception при попытке удалить объекты из моего ArrayController.Я удаляю эти сущности, просто вызывая;
[myArrayController removeObject:managedObjectToDelete];
К сожалению, когда я делаю это, я часто получаю ошибку «CoreData не может выполнить ошибку» .. с ответственным объектом, являющимся одним из объектов, управляемыхNSArrayController.
Изучение стека вызовов при возникновении исключения показывает, что сбой возникает, когда NSCollectionView получает свой метод _endOfAnimation.Это, в свою очередь, инициирует другие методы, связанные с отменой привязки (вероятно, из свойств моей сущности с элементами управления на мой взгляд).
Еще один бит информации заключается в том, что сущность, с которой я работаю, не имеет отношения к другим сущностямв моей модели.
Мне кажется, что возникает следующая проблема:
- Когда я удаляю объекты из моего NSArrayController, они, в свою очередь, удаляются из контекста.
- Послеудаление из контекста, объекты превращаются в ошибки
- NSCollectionView сохранил ссылки на объекты (теперь ошибки).Он пытается очистить их в конце анимации (отмены привязки и т. Д.).
- Когда NSCollectionView пытается очистить привязки к объекту, он заставляет данные ядра пытаться вызвать ошибку на объекте (надеюсь, я получил свою терминологию прямо здесь).Это вызывает ошибку, поскольку объект еще не был сохранен на диск.
Единственный способ предотвратить это - сохранить объекты в хранилище (сохранив их) доудаление.Это работает, но только в хакерской манере, так как мне нужно убедиться, что один раунд удаления завершен перед повторным сохранением ... и поскольку ошибка возникает во время анимации ... после некоторой задержки ... и два сохранения подрядВ результате снова возникает та же ошибка.
Означает ли это, что я не могу использовать NSArrayController с базовыми данными для заполнения NSCollectionView?Если нет, что я делаю не так?Есть ли лучший способ обойти эту проблему?