Не удается сохранить значение Double в базе данных Realm в iOS

Я просто пытаюсь понять Царство и столкнулся с проблемой. У меня есть такая модель

class Template: Object {
    dynamic var id = NSUUID().UUIDString
    var pages = List<TemplatePage>()
}
class TemplatePage : Object {
    var xPosition: Double = 0.0
    var yPosition: Double = 0.0
}

Сейчас я выполняю следующий код:

class ViewController: UIViewController {

    let realm = try! Realm()
    var templatePages = [TemplatePage]()
    override func viewDidLoad() {
        super.viewDidLoad()

        addTemplatePage(1.0, yPosition: 2.0)

        //add more template pages
        //[...]
        //when all pages have been added create a template out of it.
        addTemplate()
        getXCoordinateOfFirstTemplatePage()


    }

    //Execute this method several times depending on the user interation
    //here we only execute it once
    func addTemplatePage(xPosition: Double, yPosition: Double) {

        do {
            let templatePage = TemplatePage()
            templatePage.xPosition = xPosition
            templatePage.yPosition = yPosition
            try realm.write {
                realm.add(templatePage)
            }

            templatePages.append(templatePage)
        }
        catch _ {
            print("error while adding a template page")
        }
    }
    //once all pages have been added create a template of of all recently added pages
    func addTemplate() {
        do {
            let template = Template()
            try realm.write {

                template.pages.appendContentsOf(templatePages)
                realm.add(template)
            }
        }
        catch _ {
            print("error while adding the template")
        }
    }    
    func getXCoordinateOfFirstTemplatePage() {
        let template = realm.objects(Template)[0]
        print(template.pages[0].xPosition)
    }
}

Когда я запускаю этот код, он печатает 0.0, значение по умолчанию свойства TemplatePage xPosition. Тем не менее, я не понимаю почему, потому что я действительно ожидал, что он напечатает 1.0. Я не совсем понимаю, почему. Может кто-нибудь дать мне подсказку?

1 ответ

Решение

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

+ Изменить

var xPosition: Double = 0.0
var yPosition: Double = 0.0

в

dynamic var xPosition: Double = 0.0
dynamic var yPosition: Double = 0.0

Я пробовал несколько вещей с 'RealmSwift' для Swift 4.2, чтобы сохранить значение Double в Realm. Следующее сработало хорошо. @objc для версии Swift, а также Realm не позволяет мне определять Double как Optional, как Double? поэтому я дал значение по умолчанию.

@objc dynamic var height: Double = 0.0
Другие вопросы по тегам