首页 > 解决方案 > 如何使用 Realm (Swift) 在对象中添加和更新值?

问题描述

我在下面给出了两个课程。我想对这些对象执行(添加、更新和删除)之类的操作。

CheckOutImageList类是一个包含图像的对象数组,而CheckOutDetail类是一个包含图像对象的对象。

class CheckOutImageList: Object {

    @objc dynamic var imageUrl = ""
    @objc dynamic var imageName = "test"
    @objc dynamic var isProfile = Bool()
    @objc dynamic var imageDesc = ""

    override static func primaryKey() -> String? {
        return "imageName"
    }
}

class CheckOutDetail: Object {

    @objc dynamic var taskId = 0
    var imageList = List<CheckOutImageList>()
    @objc dynamic var remarks = ""
    @objc dynamic var isFollowUp = Bool()
    @objc dynamic var followDate = ""
    @objc dynamic var followTime = ""

    override static func primaryKey() -> String? {
        return "taskId"
    }
}

我可以对CheckOutDetail类执行添加和更新操作,但需要帮助才能在图像列表数组中添加、更新和删除。

标签: swiftrealm

解决方案


为了解决这个问题,我对我的对象进行了一些更改。我所做的只是为CheckOutDetailsCheckOutImageList创建了两个单独的对象,如下所示:

class CheckOutImageList: Object {

    @objc dynamic var taskId = 0
    @objc dynamic var imageUrl = ""
    @objc dynamic var imageName = ""
    @objc dynamic var isProfile = Bool()
    @objc dynamic var imageDesc = ""

    override static func primaryKey() -> String? {
        return "imageName"
    }
}

class CheckOutDetail: Object {

    @objc dynamic var taskId = 0
    @objc dynamic var remarks = ""
    @objc dynamic var isFollowUp = Bool()
    @objc dynamic var followDate = ""
    @objc dynamic var followTime = ""

    override static func primaryKey() -> String? {
        return "taskId"
    }
}

//Code to update old data or add new image data in the CheckOutImageList Object
if self.checkImageNameExist(imageName: imgDetail.fileName) {
    try! realm.write {
        realm.add(obj, update: true) //obj is of type CheckOutImageList
    }
} else {
    try! realm.write {
        realm.add(obj)
    }
}

//Function will return true if primary key already exist else return false
func checkImageNameExist(imageName: String) -> Bool {
    return realm.object(ofType: CheckOutImageList.self, forPrimaryKey: imageName) != nil
}

并使用CheckOutDetails中的 taskId作为外键来获取相同 id 的详细信息。


推荐阅读