1

현재 프로젝트에서 NSFetchedResultsControllerUICollectionView이 잘 작동합니다. 현재 나는 다음과 같은 오류 메시지가Swift 3의 UICollectionView + NSFetchedResultsController

This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. 

나는 UICollectionView에 변경 사항을 큐에 BlockOperation 배열을 사용하고 원인 스위프트 3, 엑스 코드 (8)에 대한 프로젝트를 업그레이드하려고합니다. 다음은 새 항목을 삽입하는 방법의 예입니다.

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) 
    }) 
} 

내 현재 구현 누군가가이 나를 도울 수 스위프트 3에 UICollectionViewNSFetchedResultsController을 구현했습니다입니까?

+1

헤이에 대한 링크입니다 도움이 될까요? - https://gist.github.com/nazywamsiepawel/e88790a1af1935ff5791c9fe2ea19675 –

답변

4

감사합니다 파블, 귀하의 요지는 매우 도움이되었습니다. 나는 그것을 포크하고 완전히 Swift 3iOS10을 지원하도록 업데이트했다. 이후 배경 스레드에서 UICollectionView 업데이트 문제를 해결하지 않습니다.

UICollectionView을 백그라운드 스레드에서 업데이트하면 오류가 발생합니다.

This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. 

당신이 여기

DispatchQueue.main.async { 
    // i.e. insertion of new items       
    this.collectionView!.insertItems(at: [newIndexPath!]) 
} 

내부의 collectionView 개체의 모든 업데이 트를 포장 한 작업 NSFetchedResultsControllerUICollectionView의 조합을 얻으려면 어쩌면, 전체 업데이트 Gist

관련 문제