境界.更新多个ViewControllers中的数据



我正在尝试创建一个应用程序,它接受一个初始条件并将其保存在Realm数据库中。这是我的Realm类的代码:

class FunctionData: Object {
@objc dynamic var Name = ""
@objc dynamic var status = false
@objc dynamic var statusComment = ""
@objc dynamic var tester = ""

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

我创建了一个TableViewController;名称";作为每个Cell的名称。我想点击单元格并转到";SecondViewController";然后,填写其他信息,如tester和Comment。TableViewController运行良好。这里的代码,使分段到SecondViewController:

var functions: Results<FunctionData>?
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

tableView.deselectRow(at: indexPath, animated: true)
let function = functions![indexPath.row]

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let functionsVC = storyboard.instantiateViewController(identifier: "functionsVC") as! FunctionsRatingViewController
functionsVC.name = function.functionNames
functionsVC.functionID = function.functionNames
if let indexPath = tableView.indexPathForSelectedRow {
functionsVC.selectedFunction = functions![indexPath.row]
}

self.present(functionsVC, animated: true, completion: nil)

}

但在我的SecondVC中,我无法将其他信息保存在选定的";项目";。我正试图用AlertController 来做到这一点

var selectedFunction: FunctionData? {
didSet {
}
}

func showAlert() {

var textField = UITextField()

let alert = UIAlertController(title: "Status not OK", message: nil, preferredStyle: .alert)
alert.addTextField {
$0.placeholder = "Comment"
$0.addTarget(alert, action: #selector(alert.textDidChangeInLoginAlert), for: .editingChanged)
}

alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
let loginAction = UIAlertAction(title: "Save", style: .default) { [unowned self] _ in

if let currentFct = self.selectedFunction {
do {
try self.realm.write {
currentFct.realm?.create(FunctionData.self, value: ["statusComment": textField.text], update: .modified)
}
} catch {
print("Error trying to append a Comment, (error)")
}
}
print("Comment saved")

}
loginAction.isEnabled = false
alert.addAction(loginAction)
present(alert, animated: true)
}

非常感谢您的帮助!

Realm对象上的主键显示为return "functionNames"

class FunctionData: Object {
@objc dynamic var Name = ""
@objc dynamic var status = false
@objc dynamic var statusComment = ""
@objc dynamic var tester = ""

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

但是您没有将该属性包含在对象中,所以它不起作用。

更新您的对象以包含该属性

class FunctionData: Object {
@objc dynamic var functionName = UUID().uuidString //for example
@objc dynamic var Name = ""
@objc dynamic var status = false
@objc dynamic var statusComment = ""
@objc dynamic var tester = ""

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

此外,主键是唯一和奇异的,因此称其为functionNames可能不是最好的举措。尝试functionName或甚至function_id

可能还有其他问题,但这是第一个应该解决的问题。

最新更新