2016-05-19 2 views
1

В моем приложении Я храню данные в базе данных Realm и отображаю данные в UITableView. Я добавляю классную функцию за столом - теперь я могу менять ячейки путем перетаскивания. Но теперь я должен добавить метод к классу DataBase для обмена связанными объектами.Обмен двумя объектами в базе данных Realm.io в Swift

Я понял, что Королевство неупорядочено, поэтому я подумал о добавлении еще одного свойства: index. Но, следовательно, я должен поднять всякую логику об индексации элементов в datamodel (вставить в индекс, удалить по индексу и т. Д.), Это мне кажется неправильным.

Интересно, есть ли общий способ решения такой проблемы?

+0

заметил, что он прекрасно работает без какого-либо метода подкачки объектов, не имеет ни малейшего представления, почему .... –

+0

Я думаю, что это хорошо, чтобы иметь свойство в вашей области браузера, который описывает индекс (хотя я, наверное, назовите это чем-то более конкретным, чтобы избежать путаницы). –

+0

@ DanielvanderMerwe Я боялся этого. Надеялся, что у области есть возможность вставить Item по индексу. Кстати, все работало только визуально, после того, как перезагрузка таблицы приложений становится прежней .... –

ответ

2

Несмотря на то, что вы можете добавить индекс к своему объекту, мы обычно рекомендуем добавить к вашей схеме еще один класс объектов, который содержит список объектов, которые вы хотите заказать. Сопоставления «Списки/многие» упорядочены по умолчанию в Realm и предлагают удобный интерфейс для перемещения объектов и изменения порядка различными способами.

+0

Действительно? Это звучит как волшебство! К сожалению, я проверил [здесь] (https://realm.io/docs/swift/latest/) и не нашел простой пример, который мог бы дать мне вашу идею. Могу ли я добавить еще одно свойство в класс 'Item':' let items = List () '? И он будет содержать упорядоченный массив всех элементов? Мне кажется слишком легко быть правдой ... –

+0

Нет, вам нужно будет добавить этот список в новый класс 'ItemList', который моделирует один список элементов. – marius

+0

Отлично! Все работает безупречно! Огромное спасибо. Я добавил ниже в дополнительном ответе мои классы базы данных Realm (так же, как образец), так что вы могли бы это проверить, возможно, есть еще некоторые ошибки в использовании методов realm? @marius –

1

Это демонстрация кода использования класса List в базе данных Realm. Вот как я это понял в своем проекте. Я упростил это для удобства. Большое спасибо @marius за то, что вы предоставили мне такое грациозное решение.

class Item: Object { 
    number: Int 
    name: String 

    convenience init(number: Int, name: String) { 
     self.number = number   
     self.name = name 
    } 

class ItemsList: Object { 
    var list = List<Item>() 
} 

class DataBase { 
    static let realm = try! Realm() 
    static var itemsList = ItemsList() 
    static var numberOfItems: Int { 
     return self.itemsList.list.count 
    } 

    class func addItemToDataBase(number: Int, name: String) { 
     let item = Item(number: number, name: String) 
     try! realm.write({ 
      realm.add(item) 
      print("Success!") 
     }) 
     itemsList.list.append(item) 
    } 
} 
Смежные вопросы