cache fetchClauses in property so closures do not retain them indeterminately

This commit is contained in:
John Rommel Estropia
2016-03-30 21:16:10 +09:00
parent 410feda5cd
commit 633ab0a249

View File

@@ -891,6 +891,7 @@ public final class ListMonitor<T: NSManagedObject> {
object: self object: self
) )
} }
self.fetchClauses = fetchClauses
self.taskGroup.notify(.Main) { [weak self] () -> Void in self.taskGroup.notify(.Main) { [weak self] () -> Void in
@@ -902,7 +903,7 @@ public final class ListMonitor<T: NSManagedObject> {
strongSelf.fetchedResultsControllerDelegate.enabled = false strongSelf.fetchedResultsControllerDelegate.enabled = false
let fetchRequest = strongSelf.fetchedResultsController.fetchRequest let fetchRequest = strongSelf.fetchedResultsController.fetchRequest
for clause in fetchClauses { for clause in strongSelf.fetchClauses {
clause.applyToFetchRequest(fetchRequest) clause.applyToFetchRequest(fetchRequest)
} }
@@ -1019,6 +1020,7 @@ public final class ListMonitor<T: NSManagedObject> {
self.sectionIndexTransformer = { $0 } self.sectionIndexTransformer = { $0 }
} }
self.transactionQueue = transactionQueue self.transactionQueue = transactionQueue
self.fetchClauses = fetchClauses
fetchedResultsControllerDelegate.handler = self fetchedResultsControllerDelegate.handler = self
fetchedResultsControllerDelegate.fetchedResultsController = fetchedResultsController fetchedResultsControllerDelegate.fetchedResultsController = fetchedResultsController
@@ -1045,7 +1047,7 @@ public final class ListMonitor<T: NSManagedObject> {
return return
} }
self.refetch(fetchClauses) self.refetch(self.fetchClauses)
} }
) )
@@ -1068,7 +1070,7 @@ public final class ListMonitor<T: NSManagedObject> {
if previousStores != currentStores { if previousStores != currentStores {
self.refetch(fetchClauses) self.refetch(self.fetchClauses)
} }
} }
@@ -1130,6 +1132,7 @@ public final class ListMonitor<T: NSManagedObject> {
private var observerForDidChangePersistentStore: NotificationObserver! private var observerForDidChangePersistentStore: NotificationObserver!
private let taskGroup = GCDGroup() private let taskGroup = GCDGroup()
private let transactionQueue: GCDQueue private let transactionQueue: GCDQueue
private var fetchClauses: [FetchClause]
private var willChangeListKey: Void? private var willChangeListKey: Void?
private var didChangeListKey: Void? private var didChangeListKey: Void?