Как добавить и обновить значения в объектах с помощью Realm (Swift)? - PullRequest
0 голосов
/ 25 мая 2018

У меня есть два класса, приведенные ниже.Я хочу выполнить такие операции, как (Добавить, Обновить и Удалить) для этих объектов.

Класс 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 класса, но нужна помощь для добавления, обновления и удаления в массиве списка изображений.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Чтобы решить эту проблему, я сделал некоторые изменения в моих объектах.Что я сделал, я просто создал два отдельных объекта для обоих CheckOutDetails и CheckOutImageList , как показано ниже:

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
}

И использую taskId в CheckOutDetails в качестве внешнего ключа для извлечения деталей того же идентификатора.

0 голосов
/ 25 мая 2018

Вы можете добавить CheckOutImageList элемент к объекту CheckOutDetail.

Попробуйте это:

let realmIn = try! Realm()

var checkOutDetail = CheckOutDetail()
checkOutDetail.taskId = 1
checkOutDetail.imageList = "imageList"
checkOutDetail.isFollowUp = "isFollowUp "
checkOutDetail.followTime = "followTime"


// You can use for to append multiple elements to list
let newCheckOutImageList = CheckOutImageList()
newCheckOutImageList.imageUrl = "url"
nweCheckOutImageList.imageName = "imageName"
newCheckOutImageList.isProfile = "isProfile"
newCheckOutImageList.imageDesc = "imageDesc"

checkOutDetail.imageList.append(newCheckOutImageList)

try! realmIn.write {
     realmIn.add(checkOutDetail, update: true)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...