Ios 请求类名为Realm的rlmobject
我正在开发一个需要从JSON文件同步的应用程序。这些文件是在调用端点服务后创建的 因此,每个文件都用类名命名,并包含此类型的所有对象。所以我要做的是打开每个文件并保存/更新/删除我的领域数据库中的所有对象 目前我的丑陋解决方案是迭代领域模式并使用开关匹配实体类名:Ios 请求类名为Realm的rlmobject,ios,swift,realm,Ios,Swift,Realm,我正在开发一个需要从JSON文件同步的应用程序。这些文件是在调用端点服务后创建的 因此,每个文件都用类名命名,并包含此类型的所有对象。所以我要做的是打开每个文件并保存/更新/删除我的领域数据库中的所有对象 目前我的丑陋解决方案是迭代领域模式并使用开关匹配实体类名: let realm = RLMRealm.defaultRealm() var schema = realm.schema.objectSchema as [RLMObjectSchema] for clazz in schema {
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个类
所以我想知道,是否有一种方法可以只使用类名请求领域数据库?从RLMRealm(例如:
RLMRealm.defaultRealm().allObjectsWithClassName(“Class1”)
)或创建具有类名称的RLMObject以访问请求函数的内容。在RLMRealm
上有一个私有的、不受支持的方法(在RLMRealm\u Dynamic.h
中声明),您可以使用它--
-(RLMResults*)allObjects:(NSString*)className;
。但是,我必须警告您,此方法是私有的,当前不受支持。您可以使用Realm类中未记录的函数dynamicObjects
例如:
let realm = try? Realm()
let dogs = realm.objects(Dog.self)
变成:
let realm = try? Realm()
let dogs = realm.dynamicObjects("Dog")
他们在源代码中提出了警告:
此方法仅在特殊情况下有用,例如,
当构建与领域集成的组件时。如果
在域上构建应用程序时,建议使用类型化方法
对象(类型:)
返回域中给定类名的所有对象
- 参数typeName:要返回的对象的类名
- 返回:给定类名的所有对象作为动态对象 :nodoc:
我也花了很长时间才弄明白。我不确定他们为什么选择不在文档中公开此方法。谢谢你的回答,但我无法从swift代码访问它。此外,如果不支持,我将继续使用它。