Из того, что я понял, постер хочет загрузить определенное количество предметов из Realm и отобразить их в табличном представлении. Затем, когда пользователь нажимает кнопку «Далее», он загружает следующий набор элементов. Это иногда называется разбиением на страницы.
Начиная с объекта Realm
class ItemClass: Object {
@objc dynamic var item_name = ""
@objc dynamic var item_index = ""
}
, а затем объекта результатов класса, который мы будем использовать в качестве источника данных вместе с целочисленной переменной для отслеживания того, что первый элемент находится в наборе отображаемых данных
var itemResults: Results<ItemClass>!
var startingIndex = 0
, затем мы создадим 20 тестовых элементов в области с именем Item X и индексом, являющимся целочисленным индексом элемента.
var itemArray = [ItemClass]()
for i in 0..<20 {
let item = ItemClass()
let num = "Item \(i)"
item.item_number = num
item.index = i
try realm.write {
realm.add(item)
}
}
При первом запуске приложения мы загрузим 5 элементов из Realm и заполним наш источник данных tableView. Эти элементы будут элементами с индексами 0, 1, 2, 3, 4
func loadItems() {
let realm = try! Realm()
self.itemResults = realm.objects(ItemClass.self).filter("index >= 0 AND index <=4").sorted(byKeyPath: "index")
//the next time data is loaded, we'll start with item at index of 5
self.startingIndex = 5
}
, затем у нас будет кнопка, которую пользователь нажимает, чтобы загрузить еще 5 и заменить отображаемые. При первом нажатии кнопки будут загружены элементы с индексами 5, 6, 7, 8, 9. При следующем нажатии кнопки будет загружено 10, 11, 12, 13, 14. Et c et c.
func handleTestButton2Action() {
let endingIndex = self.startingIndex + 4
let realm = try! Realm()
self.itemResults = realm.objects(ItemClass.self).filter("index >= %i AND index <= %i", self.startingIndex, endingIndex).sorted(byKeyPath: "index")
self.startingIndex = endingIndex + 1
self.itemTableView.reloadData()
}