【问题标题】:Cannot store a Double value in Realm database in iOS无法在 iOS 的 Realm 数据库中存储 Double 值
【发布时间】:2016-03-18 10:37:29
【问题描述】:

我只是想了解 Realm 并遇到了一个问题。我有一个这样的模型

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。我不太明白为什么。谁能给我一个提示?

【问题讨论】:

    标签: ios swift realm realm-list


    【解决方案1】:

    我也遇到过类似的问题。每当您像使用 TemplatePage 一样使用嵌套类时,都要使变量动态化。

    改变

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

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

    【讨论】:

    【解决方案2】:

    我在 Swift 4.2 中尝试了一些使用“RealmSwift”的方法来在 Realm 中存储 Double 值。以下效果很好。 @objc 适用于 Swift 版本,Realm 也不允许我将 Double 定义为 Optional,如 Double?所以我给了默认值。

    @objc dynamic var height: Double = 0.0
    

    【讨论】:

    • 是的,这很奇怪,花了一段时间才弄明白
    • @Mike 没错。您找到其他解决方案了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 2017-12-04
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多