更新领域数据库swift中的值

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

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: ) 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") } 

将根据要求提供更多代码

要更新对象,它必须具有主键,并在编辑后使用

  // 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)