#swift #uicollectionview #swift3 #nsfetchedresultscontroller
#swift #uicollectionview #swift3 #nsfetchedresultscontroller
Вопрос:
В моем текущем проекте я интегрировал a NSFetchedResultsController
с a UICollectionView
, который работает нормально. В настоящее время я пытаюсь обновить проект до Swift 3 и Xcode 8, что вызывает следующее сообщение об ошибке
This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread.
Я использую BlockOperation
массив для постановки изменений в очередь UICollectionView
. Вот пример того, как я вставляю новый элемент.
self.blockOperations.append(BlockOperation(block: {
collectionView?.insertItems( at: [newIndexPath!])
}))
Это моя текущая реализация controllerDidChangeContent
var blockOperations = [BlockOperation]()
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
if self.shouldReloadCollectionView {
self.collectionView.reloadData()
}
self.collectionView?.performBatchUpdates({
for operation in self.blockOperations {
OperationQueue.current?.addOperation(operation)
}
}, completion: { (completed) in
print(completed)
})
}
Кто-нибудь, реализованный NSFetchedResultsController
с помощью a UICollectionView
в Swift 3, может помочь мне в этом?
Комментарии:
1. эй, может быть, это поможет? — gist.github.com/nazywamsiepawel /…
Ответ №1:
Спасибо, Павел, твоя суть была очень полезной. Я разветвил его и обновил, чтобы полностью поддерживать Swift 3
и iOS10
. Поскольку это не решило проблему с обновлением UICollectionView
из фонового потока.
Ошибка вызвана обновлением UICollectionView
из фонового потока.
This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread.
Чтобы получить комбинацию NSFetchedResultsController
и UICollectionView
работать, вы должны переносить каждое обновление collectionView
объекта внутрь
DispatchQueue.main.async {
// i.e. insertion of new items
this.collectionView!.insertItems(at: [newIndexPath!])
}
Вот ссылка на полную обновленную суть