问题描述
我正在尝试创建一个具有初始条件的应用程序,并将其保存在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,将“名称”作为每个单元格的名称。我想单击该单元格,然后转到“ SecondViewController”,然后在其中填充其他信息,例如测试器和注释。 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对象上的主键显示为@Line 12345
Line 23456
@Line 12345
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
。
可能还有其他问题,但这是应该首先解决的问题。