var blockOperations = [NSBlockOperation]()
func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) {
if type == .Insert {
blockOperations.append(NSBlockOperation(block: {
self.collectionView?.insertItemsAtIndexPaths([newIndexPath!])
}))
}
}
func controllerDidChangeContent(controller: NSFetchedResultsController) {
collectionView?.performBatchUpdates({
for operation in self.blockOperations {
operation.start()
}
}, completion: { (completed) in
print("completed")
})
}
これは、コレクション ビューにメッセージを挿入するためのコードです。
メッセージが遅延したときにブロック案件に挿入できるように、ブロック操作が必要です。
viewController
問題は、print("completed")
重複を却下するたびに発生します。つまり、メモリリークがあります。
deinit
ブロック操作を削除しない限り、呼び出されることはありませviewController
ん。