我正在开发一个需要从JSON文件同步的应用。调用端点服务后,这些文件是plist创建的。
因此每个文件都以ClassName命名,并包含此类型的所有对象。所以我要做的就是打开每个文件并保存/更新/删除我的领域数据库中的所有这些对象。
目前我丑陋的解决方案是迭代领域架构并使用开关来匹配实体类名:
let realm = RLMRealm.defaultRealm()
var schema = realm.schema.objectSchema as [RLMObjectSchema]
for clazz in schema {
switch(clazz.className){
case Class1.className():
var sortedArray = Class1.allObjects().sortedResultsUsingProperty("updatedAt", ascending: false)
if(sortedArray.count>0){
date = sortedArray.firstObject().valueForKey("updatedAt") as Int
}
break
case Class2.className():
var sortedArray = Class2.allObjects().sortedResultsUsingProperty("updatedAt", ascending: false)
if(sortedArray.count>0){
date = sortedArray.firstObject().valueForKey("updatedAt") as Int
}
break
}
}
这段代码是为了同步目的获取实体类的最后更新日期,但我需要它用于其他东西,所以这适用于几个类,但我有40个类......
所以我想知道,如果有办法只使用类名请求Realm DB?来自RLMRealm的东西(例如:RLMRealm.defaultRealm().allObjectsWithClassName("Class1")
)或创建带有className的RLMObject以访问请求函数。
答案 0 :(得分:1)
RLMRealm
上有一个私有的,不受支持的方法(在RLMRealm_Dynamic.h
中声明,您可以使用 -
- (RLMResults *)allObjects:(NSString *)className;
。但是,我必须警告您,此方法是私有的,目前不受支持。
答案 1 :(得分:0)
您可以使用Realm类中未记录的函数dynamicObjects。
例如:
let realm = try? Realm()
let dogs = realm.objects(Dog.self)
变为:
let realm = try? Realm()
let dogs = realm.dynamicObjects("Dog")
他们在源代码中提出了一个警告:
此方法仅在特殊情况下有用,例如, 构建与Realm集成的组件时。如果你只是 在Realm上构建应用程序,建议使用类型化方法
objects(type:)
。返回Realm中给定类名的所有对象。
- parameter typeName:要返回的对象的类名。
- 返回:给定类名的所有对象作为动态对象 通过:nodoc:
让我永远想起这个。不知道为什么他们选择不在文档中公开这种方法。