我有班级GraphHandler
。在超类内部,我尝试处理恢复上次保存到数据库中的对象。为此,我使用了primaryKey。
重点是恢复时间我不知道我应该期待哪种类型。所以我尝试了这个:
let realm = ClientManager.cacheRealm()
realm.object(ofType: Object.self, forPrimaryKey: "uniqueid")
但我收到错误:
由于未捕获的异常RLMException
而终止应用,原因:'对象类型RealmSwiftObject
不由Realm管理。如果您的配置中使用自定义objectClasses
/ objectTypes
数组,请将RealmSwiftObject
添加到objectClasses
/ objectTypes
列表中。'
我试图这样做,处理程序不需要事先知道最后保存了哪种类型的对象。什么能解决这个问题?我认为实施仿制药不会对它有任何好处,因为我无法动态改变。
答案 0 :(得分:0)
当您调用函数realm.object
时,需要知道对象的类型,因为使用此函数,realm
仅搜索特定类型的对象。此外,primary key
的类型也可以不同,因此在查询realm
之前需要知道您要查找的对象类型。
此时查询所有类型和过滤只是一种选择,因为Result
只能存储单一类型的对象。但是,如果您确实需要使用单个查询查询所有类型以获取最后一个数据库条目而不管它具有哪个类,请查看this对相关GitHub问题的评论,其中Realm
工程师为这个问题提供一些解决方法。
您可以尝试的另一种解决方法如下:创建TimeStamps
类,由Realm
管理,在Realm
中只有一个条目,并且只有一个与您的其他Realm
课程的一个关系。一对一关系另一侧的对象将始终是您最后一次添加到该特定类的Realm
的对象。使用这种方法,如果您正在寻找添加到realm
的最新对象,您可以使用一个简单的查询来检索您拥有的唯一TimeStamps
对象,并且可以通过筛选最后添加的对象来筛选一对一的关系TimeStamps
有。当然,为了实现这一点,您需要将对象的创建日期与您在TimeStamps
对象中存储的关系相关联,并在每个write transactions
中更新这些关系。