У меня возникло странное поведение с NSFetchedResultsController. Это новое в iOS 10. Прямо к точке: fetchedObjects
содержит дубликаты объектов.NSFetchedResultsController возвращает дубликаты (тот же идентификатор объекта и ссылка)
Это не означает «дублировать» по моим собственным критериям. Они буквально имеют одинаковые идентификаторы объектов и одну и ту же ссылку.
Как это происходит в моем приложении:
FRC является установка и выборки выполняется
2 объекты извлекаются (в данном примере)
Что-то происходит в моем слое синхронизации , обновляется другой объект (который извлекает элементы в связи с)
FRC называет делегата, что cont ent сделал изменение.
fetchedObjects
содержит 4 объекта (2 дубликатов)
Вот консольный вывод из моей отладки в controllerDidChangeContent
метода.
po frc.fetchedObjects
- 0 : <ListItem: 0x1700dc3f0> (entity: ListItem; id: 0x1706294a0 <x-coredata://12D0CB00-7BF4-402A-8371-19DD1CFB1537/ListItem/t3384FC2D-3399-41FE-B7DD-C277922F495445> ; data: { ... }
- 1 : <ListItem: 0x1700dc3f0> (entity: ListItem; id: 0x1706294a0 <x-coredata://12D0CB00-7BF4-402A-8371-19DD1CFB1537/ListItem/t3384FC2D-3399-41FE-B7DD-C277922F495445> ; data: { ... }
- 2 : <ListItem: 0x1704c49f0> (entity: ListItem; id: 0x170631680 <x-coredata://12D0CB00-7BF4-402A-8371-19DD1CFB1537/ListItem/t3384FC2D-3399-41FE-B7DD-C277922F495446> ; data: { ... }
- 3 : <ListItem: 0x1704c49f0> (entity: ListItem; id: 0x170631680 <x-coredata://12D0CB00-7BF4-402A-8371-19DD1CFB1537/ListItem/t3384FC2D-3399-41FE-B7DD-C277922F495446> ; data: { ... }
(lldb) po frc.fetchedObjects![0].objectID.isEqual(frc.fetchedObjects![1].objectID)
true
Другое примечание: когда я снова создаю FRC и извлекаю объекты, дубликатов нет.
Я просто понятия не имею, что может вызвать эту проблему. Возможно, я ошибаюсь в своем приложении, что вызывает эту ошибку. В любом случае, это действительно странно, что FRC допускает дублирование объектов в fetchedObjects
. Не могли бы вы дать мне понять, как мне его отладить?
Я подозреваю, что-то выключен в ваших функциях делегатов FRC didChange, так как дублирует показать 1) после того, как с точки зрения только после изменения в некоторых объектов, и 2) изменение не отражается в базе данных , Я бы сосредоточился на сравнении случаев .insert и .move с предлагаемым кодом Apple, но если они в порядке, проверьте остальные. Прошло некоторое время с тех пор, как я пошел на бета-версию Xcode, но я не помню никаких изменений здесь, кроме переключения с AnyObject на Any в некоторых параметрах, но они могут быть чувствительны к тому, что не было в версии 7. –