【问题标题】:updating values in a realm database swift快速更新领域数据库中的值
【发布时间】:2018-09-12 13:52:36
【问题描述】:

我正在尝试更新领域数据库中的值。如果用户选择包含值的行,我希望能够更新该行的值。这是我的代码,但不是更新,而是在数据库中创建另一个值

func updateTodoList(todoList: TodoListModel, name: String, description: String, createdDate: Date, remiderDate: Date, photo: Data, isCompleted: Bool) -> Void {

        try! database.write {

            if name != "" {
                todoList.name = name
            } else {
                todoList.name = "No extra information"
            }

            todoList.desc = description
            todoList.createdDate = createdDate
            todoList.remiderDate = remiderDate
            todoList.photo = photo
            todoList.isCompleted = false

        }

    }

我确实选择了行

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let todoList = todoItems?[indexPath.row]

        let storyBoard: UIStoryboard = UIStoryboard(name: "AddTodoListSB", bundle: nil)
        let newViewController = storyBoard.instantiateViewController(withIdentifier: Constants.ADD_TODO_SB) as! AddTodoListVC
        newViewController.loadViewIfNeeded()

        let min = Date()
        let max = Date().addingTimeInterval(60 * 60 * 60 * 60)
        guard let itemPhoto = UIImagePNGRepresentation(newViewController.imageView.image!) else {return}
        newViewController.picker.minimumDate = min
        newViewController.picker.maximumDate = max
//        newViewController.showDateTimePicker(sender: <#T##AnyObject#>)
        newViewController.picker.completionHandler = { date in
            let formatter = DateFormatter()
            formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
            self.title = formatter.string(from: date)

            let reminder = formatter.string(from: date)

            TodoListFunctions.instance.updateTodoList(todoList: todoList!, name: newViewController.titleTxtField.text!, description: newViewController.moreInfoTxtView.text!, createdDate: (todoList?.createdDate)!, remiderDate: formatter.date(from: reminder)!, photo: itemPhoto, isCompleted: false)


        }

        tableView.reloadData()
        self.present(newViewController, animated: true, completion: nil)

    }

// TodolistModel

class TodoListModel: Object {

    @objc dynamic var id = UUID().uuidString
    @objc dynamic var name: String = ""
    @objc dynamic var desc: String = "No Description"
    @objc dynamic var photo: Data? = nil
    @objc dynamic var createdDate: Date?
    @objc dynamic var remiderDate: Date?
    @objc dynamic var isCompleted = false


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

    let parentCategory = LinkingObjects(fromType: CategoryModel.self, property: "items")

}

可根据要求提供更多代码

【问题讨论】:

  • edit 你的问题包括你的TodoListModel 类的声明。
  • 我已经这样做了。谢谢
  • todoItems 是如何定义的,它是Results 实例还是Array
  • Results 实例
  • @DávidPásztor 请协助

标签: ios swift realm


【解决方案1】:

要更新一个对象,它必须有一个主键,并且在你编辑它之后使用

 // if it doesn't exist it'll be added
 database.add(editedObjc, update: true)

//

// create object 1  , note: r = database

let lista = TaskList()

lista.pid = 1

lista.name = "Whole List"

// create object 2

let lista2 = TaskList()

lista2.pid = 2

lista2.name = "Whole List 2" 

// add to database by write

r.add([lista,lista2]) 

let stored  = r.objects(TaskList.self)

print("before edit" , stored)

// edit name of object 2

lista2.name = "qqwwqwqwqwqwqwqwq" 

// update the object after changing it's name

r.add(lista2, update: true) 

let stored2  = r.objects(TaskList.self)

print("after edit" , stored2)

【讨论】:

  • 我的 ListModel 中有一个主键,但你的答案不清楚
  • 它只是不断上传新项目
  • 设置新主键的位置
  • 我将我的模型添加到问题中
  • 想通了。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多