Force fetchLimit for ListPublisher and ListSnapshot

This commit is contained in:
John Estropia
2019-11-14 20:34:48 +09:00
parent c2e4c033ef
commit b1decc9853
2 changed files with 22 additions and 1 deletions

View File

@@ -192,6 +192,17 @@ extension Internals {
self.structure.update(sectionIDs: identifiers) self.structure.update(sectionIDs: identifiers)
} }
mutating func resize(limit: Int) {
let itemIdentifiers = self.itemIdentifiers
guard itemIdentifiers.endIndex > limit else {
return
}
self.structure.remove(itemIDs: itemIdentifiers.suffix(from: limit))
self.structure.removeAllEmptySections()
}
// MARK: Private // MARK: Private
@@ -359,7 +370,7 @@ extension Internals {
.insert(contentsOf: items, at: itemIndex) .insert(contentsOf: items, at: itemIndex)
} }
mutating func remove(itemIDs: [NSManagedObjectID]) { mutating func remove<C: Collection>(itemIDs: C) where C.Element == NSManagedObjectID {
let itemPositionMap = self.itemPositionMap() let itemPositionMap = self.itemPositionMap()
var removeIndexSetMap: [Int: IndexSet] = [:] var removeIndexSetMap: [Int: IndexSet] = [:]
@@ -390,6 +401,11 @@ extension Internals {
} }
} }
mutating func removeAllEmptySections() {
self.sections.removeAll(where: { $0.elements.isEmpty })
}
mutating func move(itemID: NSManagedObjectID, before beforeItemID: NSManagedObjectID) { mutating func move(itemID: NSManagedObjectID, before beforeItemID: NSManagedObjectID) {
guard let removed = self.remove(itemID: itemID) else { guard let removed = self.remove(itemID: itemID) else {

View File

@@ -93,6 +93,11 @@ extension Internals {
var snapshot = Internals.DiffableDataSourceSnapshot( var snapshot = Internals.DiffableDataSourceSnapshot(
sections: controller.sections ?? [] sections: controller.sections ?? []
) )
let fetchLimit = controller.fetchRequest.fetchLimit
if fetchLimit > 0 {
snapshot.resize(limit: fetchLimit)
}
snapshot.reloadSections(self.reloadedSectionIDs) snapshot.reloadSections(self.reloadedSectionIDs)
snapshot.reloadItems(self.reloadedItemIDs) snapshot.reloadItems(self.reloadedItemIDs)