diff --git a/CoreStore/Internal/FetchedResultsControllerDelegate.swift b/CoreStore/Internal/FetchedResultsControllerDelegate.swift index 87799b9..32fefc6 100644 --- a/CoreStore/Internal/FetchedResultsControllerDelegate.swift +++ b/CoreStore/Internal/FetchedResultsControllerDelegate.swift @@ -49,6 +49,8 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult // MARK: Internal + internal var enabled = true + internal weak var handler: FetchedResultsControllerHandler? internal weak var fetchedResultsController: NSFetchedResultsController? { @@ -69,6 +71,11 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult @objc dynamic func controllerWillChangeContent(controller: NSFetchedResultsController) { + guard self.enabled else { + + return + } + self.deletedSections = [] self.insertedSections = [] @@ -77,11 +84,21 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult @objc dynamic func controllerDidChangeContent(controller: NSFetchedResultsController) { + guard self.enabled else { + + return + } + self.handler?.controllerDidChangeContent(controller) } @objc dynamic func controller(controller: NSFetchedResultsController, didChangeObject anObject: AnyObject, atIndexPath indexPath: NSIndexPath?, forChangeType type: NSFetchedResultsChangeType, newIndexPath: NSIndexPath?) { + guard self.enabled else { + + return + } + guard type.rawValue > 0 else { // This fix is for a bug where Apple passes 0 for NSFetchedResultsChangeType, but this is not a valid enum case. @@ -170,6 +187,11 @@ internal final class FetchedResultsControllerDelegate: NSObject, NSFetchedResult @objc dynamic func controller(controller: NSFetchedResultsController, didChangeSection sectionInfo: NSFetchedResultsSectionInfo, atIndex sectionIndex: Int, forChangeType type: NSFetchedResultsChangeType) { + guard self.enabled else { + + return + } + switch type { case .Delete: self.deletedSections.insert(sectionIndex) diff --git a/CoreStore/Observing/ListMonitor.swift b/CoreStore/Observing/ListMonitor.swift index d9249b1..d1effe6 100644 --- a/CoreStore/Observing/ListMonitor.swift +++ b/CoreStore/Observing/ListMonitor.swift @@ -840,7 +840,7 @@ public final class ListMonitor { return } - strongSelf.fetchedResultsControllerDelegate.fetchedResultsController = nil + strongSelf.fetchedResultsControllerDelegate.enabled = false let fetchRequest = strongSelf.fetchedResultsController.fetchRequest for clause in fetchClauses { @@ -864,7 +864,7 @@ public final class ListMonitor { return } - strongSelf.fetchedResultsControllerDelegate.fetchedResultsController = strongSelf.fetchedResultsController + strongSelf.fetchedResultsControllerDelegate.enabled = true strongSelf.isPendingRefetch = false NSNotificationCenter.defaultCenter().postNotificationName( @@ -1138,7 +1138,7 @@ extension ListMonitor: FetchedResultsControllerHandler { } internal func controller(controller: NSFetchedResultsController, sectionIndexTitleForSectionName sectionName: String?) -> String? { - + return self.sectionIndexTransformer(sectionName: sectionName) } }