Вы не можете напрямую изменить экземпляр Results
.Results
- это автоматически обновляемые коллекции, что означает, что они всегда отражают текущее состояние запроса, который вы использовали для их инициализации.Вам необходимо изменить Realm
, чтобы изменить экземпляр Results
.
Более того, экземпляр Results
гарантированно сохранит свой порядок только в случае, если вы его отсортируете.Поэтому вам нужно будет ввести свойство в Trip
, которое вы используете для сортировки объектов и изменить это свойство, когда пользователь перемещает строку.
Ваш класс TripsList
кажется ненужным, так как кажется,что вы просто хотите хранить несколько Trip
объектов в Realm, а затем извлекать их, фактически не делая никакой группировки.Даже если вам нужно сгруппировать их, вы можете сделать это, используя запросы Realm.Учитывая это, я бы изменил ваш текущий код, чтобы позволить пользователю сортировать свои Trip
s и сохранять сортировку в Realm
.
class Trip: Object {
// Your existing code for Trip
...
// Sorting property
@objc dynamic var sortingIndex = 0
}
в вашем контроллере табличного представления:
var trips : Results<Trip>?
override func viewDidLoad() {
super.viewDidLoad()
trips = realm.objects(Trip.self).sorted(byKeyPath: "sortingIndex")
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return trips?.count ?? 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel?.font = UIFont.systemFont(ofSize: 17)
cell.accessoryType = UITableViewCell.AccessoryType.disclosureIndicator
if let tripID = trips?[indexPath.row].tripID {
cell.textLabel?.text = nameData.names[tripID]
}
return cell
}
override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
guard let movedObject = trips?.[sourceIndexPath.row] else { return }
// Depending on your exact needs, you might want to update the `sortingIndex` property of your other rows as well, whose position in the table view was affected by the reordering
try! realm.write {
movedObject.sortingIndex = destinationIndexPath.row
}
}