#ios #realm #swift4
#iOS #область #swift4
Вопрос:
Я использую класс 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 и обратно.
В приведенной ниже функции «modules» вычисляется правильно с 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. Что такое
Module
type — это тоже объект Realm? Иmaths
объект управляется Realm (т. Е. хранится в Realm)?
Ответ №1:
Объекты Realm не поддерживают типы массивов, вместо этого вы должны использовать тип Realm List
для поддержания ссылок на другие объекты Realm. Если Module
это не подкласс Realm object, вы не можете сохранить ссылку на него. Смотрите здесь: https://realm.io/docs/swift/latest/#models
Итак, есть два варианта:
- Либо измените
modules
свойство наList
и сохранитеModule
объекты в Realm тоже, либо - Нужно ли сохранять
modules
свойство, если вы сохраняете JSON? Вы могли бы продолжать хранить только строку JSON и создаватьmodules
вычисляемое свойство (для которого вам понадобитсяgetter
, и вы можете выбрать, создаватьsetter
или нет).
Вам придется выбирать дальнейший путь в зависимости от ваших вариантов использования.
Комментарии:
1. Спасибо за руководство. Я выбрал вариант 2, и у меня все получилось.