Царство теряет данные в игнорируемой переменной свойства внутри подобъекта? (быстро 4) - PullRequest
0 голосов
/ 01 июля 2018

Я создаю объект, который хранит List<Int> (который Realm теперь обрабатывает в версии 3+), и я хочу иметь возможность быстрого поиска, поэтому я также сохраняю словарь типа [Int: Int], заполненный как Я добавляю предметы в список.

Царство, очевидно, не может хранить словарь, но оно может хранить Список. Этот шаблон прекрасно работает, когда я использую его в своем основном объекте, но когда я помещаю его в объект, на который ссылается основной объект Top, словарь продолжает сбрасываться на пустой. Чтобы проверить это, я создал простой проект, который имеет только один View Controller, и единственное, что он делает, это создает область, создает главный объект, добавляет некоторые элементы в список в подобъекте и распечатывает результат. (все в методе viewDidLoad).

Пример кода, который демонстрирует проблему:

@objcMembers class Top: Object {
    dynamic var id = UUID().uuidString
    dynamic var inside: Inside? = Inside()

    func addInside(_ value: Int) {
        inside?.add(value)
    }
}

@objcMembers class Inside: Object {
    var name = UUID().uuidString
    dynamic var list = List<Int>()
    var dictionary = [Int: Int]()

    override static func ignoredProperties() -> [String] { return ["dictionary", "name"] }

    func add(_ value: Int) {
        list.append(value)
        dictionary[value] = value
        print("Name: \(name); Dictionary: \(dictionary); List: \(list)")
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    let realm = try! Realm()
    try! realm.write {
        realm.deleteAll()
    }

    let topObj = Top()
    try! realm.write {
        realm.add(topObj)
        topObj.addInside(12)
        topObj.addInside(32)
        topObj.addInside(42)
    }
}

Вывод этого в консоли показывает:

Name: 977DBC69-BEAA-4F33-BB38-60643DFEA72D; Dictionary: [12: 12]; List: List<int> <0x604000102f40> (
    [0] 12
)
Name: 4EB8F28E-0401-4CB7-9E77-A9F769EFAC64; Dictionary: [32: 32]; List: List<int> <0x600000103f90> (
    [0] 12,
    [1] 32
)
Name: 453608E0-2DEA-4D43-AF73-929137D8E16A; Dictionary: [42: 42]; List: List<int> <0x600000104020> (
    [0] 12,
    [1] 32,
    [2] 42
)

Я добавил строку UUID в класс Inside и сделал ее неуправляемым свойством, чтобы посмотреть, не является ли это просто проблемой в Dictionary; но у обоих есть проблемы. Этот пример показывает, что Realm создает новый экземпляр объекта каждый раз, когда я вызываю для него метод - хотя я ожидаю, что объект останется в памяти, потому что я все еще ссылаюсь на объект Top, который его держит.

Существует ли конфигурация, которая скажет Realm прекратить создание новых экземпляров подобъекта в этих простых случаях? Если бы я перезагрузил исходный объект Top из базы данных, я бы ожидал потерять эти игнорируемые свойства, но это просто не имеет смысла для меня. Что еще мне не хватает? Спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...