ios - Realm 。更新多个ViewController中的数据

标签 ios swift uiviewcontroller realm

我正在尝试创建一个具有初始条件的应用程序,并将其保存在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运作良好。
这里的代码,以SecondViewViewController:
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
可能还有其他问题,但这是应该首先解决的问题。

关于ios - Realm 。更新多个ViewController中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63807994/

相关文章:

ios - UISearchController:用于显示和搜索的单个与单独的表格 View

ios - 由于 Arm64 和 Armv7,构建失败?

iphone - ios:使 UIBarButtonItem 与 TabBar 导航交互

ios - IOS Swift 中自动布局的对齐问题

swift - 将属性存储在已删除的 couchbase 文档中

ios - 忽略非视网膜图像的利弊?

ios - WKWebView 和 NSURLProtocol 不工作

iphone - NSInternalInconsistencyException - 无法加载 bundle : 中的 NIB

iOS:ScrollView 无限分页 - 重复的端盖

ios - 在这种情况下,XIB 中文件的所有者是什么?