При установке и получении массива в swift4 происходит странная вещь - PullRequest
0 голосов
/ 06 марта 2019

Я использую класс LocalSubject.swift, который я храню в RealmDB.

class LocalSubject: Object{

    @objc dynamic var subjectName: String?
    private var modules: [Module] = [Module]()
    @objc dynamic var moduleArrayJSON: String? = nil

    public func addModule(module: Module){
        modules.append(module)
    }

    public func setModules(modules: [Module]){
        self.modules = modules
        print("LocalSubject.swift > setModules() > " + String(describing: modules.count) + " > " + String(describing: self.modules.count))
  }

    public func getModules()-> [Module]{
         print("LocalSubject.swift > getModules() > " + String(describing: modules.count) + " > " + String(describing: self.modules.count))
        return modules.sorted(by: { $0.displayOrder! < $1.displayOrder!})
    }
} 

Я сохраняю класс в БД путем преобразования массива "modules" в json и обратно.В приведенной ниже функции «модули» вычисляются правильно с count = 3, затем я устанавливаю его в объекте «maths» LocalSubject.Теперь, когда я пытаюсь получить «модули» из «математики», я всегда получаю пустой массив.

   public func createModuleArrayFromJSONInSubjects(){
            let modules = getModuleArrayFromJSON(moduleArrayJSON: (maths?.moduleArrayJSON)!)
            for module in modules{
                print("-> " + module.title!)
            }
            maths?.setModules(modules: modules)
            for module in (maths?.getModules())!{
                print("---> " + module.title!)
            }
  }

Я не могу понять это, это кажется странным.Я что-то упустил?

1 Ответ

1 голос
/ 07 марта 2019

Объекты Realm не поддерживают типы массивов, вместо этого вы должны использовать тип Realm List для поддержки ссылок на другие объекты Realm.Если Module не является подклассом объекта Realm, вы не можете сохранить ссылку на него.Смотрите здесь: https://realm.io/docs/swift/latest/#models

Таким образом, есть два варианта:

  1. Либо измените свойство modules на List и сохраняйте объекты Module также в Realm.или
  2. Нужно ли хранить свойство modules, если вы храните JSON?Вы можете продолжать хранить только строку JSON и сделать modules вычисляемым свойством (для которого вам потребуется getter, и вы можете выбрать, следует ли setter делать или нет).

Вам придется выбирать путь вперед в зависимости от ваших вариантов использования.

...