有一个问题,我想在 Swift 中查询 realm 中的所有数据,然后在那里

there is an question, i want query all data from realm in Swift and there

提问人:bp zhang 提问时间:9/27/2023 更新时间:9/27/2023 访问量:48

问:

这是一个问题,我想在 Swift 中读取 realm 中的所有数据,并抛出一个错误EXC_BAD_ACCESS(code=1, address=0xfffffffffffffff8) 但是我可以插入数据,请帮我找到问题所在

    static func customJudge(content: String, mobile: String) -> String {
        do {
            let realm = try! Realm()
            let ruleInfo = RuleModel()
            ruleInfo.content = "123"
            ruleInfo.actionType = "提醒"
            ruleInfo.clickType = "abc"
            ruleInfo.id = Int(Date().timeIntervalSince1970)
            try realm.write {
                realm.add(ruleInfo)
            }
            let resultList =  realm.objects(RuleModel.self)
            if !resultList.isEmpty {
                print("is not null")
            } else {
                print("is null")
            }
        } catch {
            print("exception is :\(error)")
        }
        return ""
    }

let resultList = realm.objects(RuleModel.self) 此行出现错误: EXC_BAD_ACCESS (code=1, address=0xfffffffffffffff8)

我想查询所有数据

iOS Swift 领域

评论

0赞 Jay 9/28/2023
代码中存在一些问题,但它对我有用。首先,不清楚为什么 func 被声明为我刚刚使用的 .此外,会覆盖该块,因此请删除 .除此之外,我将您的代码复制并粘贴到一个新项目中,它运行良好。它写出一个 Rule 对象,然后打印到控制台。这告诉我,要么是你的 Realm 存在版本问题,要么是 Realm 没有正确安装在项目中。无论哪种方式,该代码都不是问题所在。也许这就是问题所在 - 你能包括它吗?staticfunctry!do:catch!is not nullRuleModel

答:

-1赞 vks 9/27/2023 #1

当存在内存访问问题时,通常会发生错误EXC_BAD_ACCESS。 就您的情况而言,问题可能与您管理 Realm 实例的方式有关。

确保你用来获取数据的 Realm 实例仍然有效并且没有被解除分配是至关重要的。

你可以修改代码的版本来确保正确的 Realm 管理:

 static func customJudge(content: String, mobile: String) -> String {
    do {
        let realm = try Realm()
        let ruleInfo = RuleModel()
        ruleInfo.content = "123"
        ruleInfo.actionType = "提醒"
        ruleInfo.clickType = "abc"
        ruleInfo.id = Int(Date().timeIntervalSince1970)
        
        try realm.write {
            realm.add(ruleInfo)
        }
        
        // Make sure you have a valid Realm instance here
        let anotherRealm = try Realm()
        let resultList = anotherRealm.objects(RuleModel.self)
        
        if !resultList.isEmpty {
            print("is not null")
        } else {
            print("is null")
        }
    } catch {
        print("exception is: \(error)")
    }
    return ""
}

在这段代码中,我创建了一个单独的 Realm 实例 (anotherRealm),用于在写入数据库后获取数据。这应该有助于避免与访问可能已失效的 Realm 实例相关的任何问题。

请确保还检查数据模型 (RuleModel) 并确保它与数据库架构匹配。数据模型的问题有时也会导致意外崩溃。

评论

0赞 Jay 9/28/2023
虽然所有答案都值得赞赏,但此答案中的代码并没有真正解决问题......但更重要的是,Realm var 将保持在单个函数的范围内。例如,它不会在函数范围内失效。一旦领域被实例化,它在整个函数中都有效。这就像说,然后在函数的某个点,x 必须再次设置为 1,因为它超出了范围 - 这显然不会发生。这意味着在任何给定函数中,只需创建一个领域一次。let x = 1