2015-12-07 2 views
1

У меня есть Realm модель, которая содержит список продуктов:Сортировка списка Realm и сохраняются результат

class StorageArea: Object { 
    dynamic var name = "" 
    let products = List<Product>() 
} 

Как я могу сортировать продукты в алфавитном порядке и сохраняются результат в Realm? Я не могу найти какой-либо измененный метод в классе List для изменения порядка элементов и сохранения упорядоченного результата.

У меня есть TableViewController, показывающий все продукты. Пользователь может перемещать продукты в tableView, выйти из приложения и перезапустить приложение: упорядоченный список продуктов сохраняется. Для этого я использую List.move (from, to).

Теперь я хотел бы добавить опцию для сортировки товаров по алфавиту или по дате. Что бы вы рекомендовали изменить список продуктов и сохранить его?

ответ

5

Вы можете добиться этого, получив сначала отсортированный список продуктов, затем удалите все элементы из списка и снова добавьте их в новый порядок.

realm.write { 
    let storageArea = … 
    let sortedProducts = Array(storageArea.products.sorted("name")) 
    storageArea.products.removeAll() 
    storageArea.products.appendContentsOf(sortedProducts) 
} 
+0

Как это отражается в нижнем слое? Он также удаляет элементы из самой области, а затем сохраняет их снова или просто локально в списке? Если первое, то это супер неэффективно ... – Michal

+2

@Michal: Нет, он просто удаляет ссылки из списка и повторно добавляет их. На это не влияют сохраняющиеся продукты. – marius

+0

Если я использую отсортированный метод («имя») (а не метод сортировки, как вы писали), sortedProducts пуст после вызова removeAll(), поэтому новый отсортированный список всегда пуст. Любой отзыв? – franswa

Смежные вопросы