1

В моем текущем проекте я объединил NSFetchedResultsController с UICollectionView, который отлично работает. В настоящее время я пытаюсь обновить проект до Swift 3 и Xcode 8, которая вызывает следующее сообщение об ошибкеUICollectionView + NSFetchedResultsController in Swift 3

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 с UICollectionView в Swift 3 может помочь мне с этим?

+1

эй, может быть, помогу? - https://gist.github.com/nazywamsiepawel/e88790a1af1935ff5791c9fe2ea19675 –

ответ

4

Спасибо, Павель, ваш Gist был очень полезным. Я разветвил его и обновил его, чтобы полностью поддерживать 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!]) 
} 

Вот ссылка на полный обновленный Gist

Смежные вопросы