gpt4 book ai didi

swift - 我可以在不知道对象是什么类型的情况下从数据库中获取对象吗?

转载 作者:行者123 更新时间:2023-11-28 08:04:43 25 4
gpt4 key购买 nike

我有类 GraphHandler。在父类(super class)内部,我尝试处理恢复上次保存到数据库中的对象。为此,我使用 primaryKey。关键是恢复时间我还不知道我应该期待哪种类型。所以我尝试了这个:

let realm = ClientManager.cacheRealm()
realm.object(ofType: Object.self, forPrimaryKey: "uniqueid")

但是我得到了错误:

由于未捕获的异常 RLMException 而终止应用程序,原因:“对象类型 RealmSwiftObject 不受 Realm 管理。如果在您的配置中使用自定义 objectClasses/objectTypes 数组,请将 RealmSwiftObject 添加到 objectClasses/ 列表>objectTypes。'

我正在尝试以处理程序不需要事先知道最后保存的对象类型的方式进行处理。什么可以解决这个问题?我认为实现泛型对它没有任何好处,因为我无法即时更改。

最佳答案

当你调用函数 realm.object 时,需要知道对象的类型,因为使用这个函数,realm 只搜索对象特定类型。此外,primary key 的类型也可以不同,因此在查询 realm 之前需要知道您要查找的对象的类型。

查询所有类型并在之后进行过滤目前不是一个选项,因为 Result 只能存储单一类型的对象。但是,如果您真的需要使用单个查询来查询所有类型以获取最后的数据库条目,而不管它具有什么类,请查看 this对相关的 GitHub 问题发表评论,其中 Realm 工程师针对该问题提供了一些解决方法。

您可以尝试的另一种解决方法如下:创建一个 TimeStamps 类,它由 Realm 管理,在 Realm 中只有一个条目> 并且它与您的每个其他 Realm 类都有一对一的关系。一对一关系另一端的对象始终是您上次添加到该特定类的 Realm 的对象。使用这种方法,如果您正在寻找添加到 realm 的最新对象,您可以使用一个简单的查询来检索您拥有的唯一的 TimeStamps 对象,并且您可以过滤通过过滤 TimeStamps 具有的一对一关系最后添加的对象。当然,为此,您需要将对象的创建日期与存储在 TimeStamps 对象中的关系相关联,并在每个 write transactions 中更新这些关系>.

关于swift - 我可以在不知道对象是什么类型的情况下从数据库中获取对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45509803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com