我可以从数据库中获取对象,而不知道对象的类型是什么?

时间:2017-08-04 14:49:17

标签: swift realm

我有班级GraphHandler。在超类内部,我尝试处理恢复上次保存到数据库中的对象。为此,我使用了primaryKey。 重点是恢复时间我不知道我应该期待哪种类型。所以我尝试了这个:

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

但我收到错误:

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

我试图这样做,处理程序不需要事先知道最后保存了哪种类型的对象。什么能解决这个问题?我认为实施仿制药不会对它有任何好处,因为我无法动态改变。

1 个答案:

答案 0 :(得分:0)

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

此时查询所有类型和过滤只是一种选择,因为Result只能存储单一类型的对象。但是,如果您确实需要使用单个查询查询所有类型以获取最后一个数据库条目而不管它具有哪个类,请查看this对相关GitHub问题的评论,其中Realm工程师为这个问题提供一些解决方法。

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