2015-02-09 75 views
1

我正在开发一个需要从JSON文件进行同步的应用程序。这些文件在调用端点服务后创建。请求具有Realm的ClassName的RLMObjects

因此,每个文件都使用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以访问请求函数。

回答

1

有上RLMRealm一个私人的,不支持的方法(在RLMRealm_Dynamic.h声明,你可以使用 - - (RLMResults *)allObjects:(NSString *)className;我必须警告你,但是,这种方法是私有的,目前不支持

+0

感谢您的回答,但我无法从swift代码访问它。此外,如果它不受支持,我会被卡住。 – Pintouch 2015-02-10 13:48:23

0

可以使用无证。从境界类功能dynamicObjects

,例如:

let realm = try? Realm() 
let dogs = realm.objects(Dog.self) 

变为:

let realm = try? Realm() 
let dogs = realm.dynamicObjects("Dog") 

他们提出一个警告的源代码:

这种方法只有在特定情况下是有用的,例如, 构建与境界集成组件时。如果您只是在Realm上构建应用程序 ,建议使用键入的方法 objects(type:)

返回Realm中给定类名称的所有对象。

  • 参数typeName:要返回的对象的类名称。
  • 回报:给定类名的所有对象的动态对象 通过:nodoc:

带我永远摸不着头脑也是如此。不知道他们为什么选择不在文档中公开此方法。

相关问题