fix section index titles when refetching a listMonitor

This commit is contained in:
John Estropia
2015-10-15 18:29:08 +09:00
parent 524757a7cf
commit 4792c4462e
2 changed files with 25 additions and 3 deletions

View File

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

View File

@@ -840,7 +840,7 @@ public final class ListMonitor<T: NSManagedObject> {
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<T: NSManagedObject> {
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)
}
}