У меня были проблемы с fetchBatchSize в NSFetchedResultsController, поэтому я решил сделать шаг назад и использовать его только для простого NSFetchRequest.Я создал очень простой проект только с tableViewController, который имеет 100 элементов.У элементов есть только два свойства, itemID и itemName.Я использую следующий метод для заполнения массива данных:
func initializeItems() {
let request = NSFetchRequest<Item>(entityName: "Item")
let messageSort = NSSortDescriptor(key: "itemName", ascending: true)
request.sortDescriptors = [messageSort]
request.fetchBatchSize = 20
do {
let fetchedResults = try context.fetch(request)
if fetchedResults.count > 0 {
self.items = fetchedResults
//self.tableView.reloadData()
}
} catch {
print("Could not fetch \(error)")
}
}
Это вызывается в viewDidLoad tableViewController.Контекст определяется следующим образом:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
self.context = appDelegate.persistentContainer.viewContext
Когда я запускаю приложение, таблица отображает полностью заполненный (как показано на полосе прокрутки) все строки.
Я не понимаю, почему fetchBatchSize игнорируется.
Документация выглядит следующим образом:
Размер пакета объектов, указанных в запросе на выборку.Значение по умолчанию равно 0. Размер пакета 0 рассматривается как бесконечный, что отключает поведение ошибки пакета.Если вы установите ненулевой размер пакета, коллекция объектов, возвращаемых при выполнении экземпляра NSFetchRequest, будет разбита на пакеты.Когда выборка выполняется, весь запрос оценивается, и идентификаторы всех соответствующих объектов записываются, но только данные для объектов вплоть до batchSize будут извлекаться из постоянного хранилища за один раз.Массив, возвращаемый при выполнении запроса, является прокси-объектом, который прозрачно сбрасывает пакеты по требованию.(В терминах базы данных это курсор в памяти.) Вы можете использовать эту функцию, чтобы ограничить рабочий набор данных в вашем приложении.В сочетании с fetchLimit вы можете создать поддиапазон произвольного набора результатов.
Я вижу 100 загружаемых элементов в массиве ошибок.Но затем он просматривает 5 загрузок из 20 элементов полных данных до прокрутки tableView.TableView показывает около 15 строк одновременно.
Мне нужно, чтобы данные загружались в 20 пакетах элементов при прокрутке таблицы