【问题标题】:Requesting RLMObjects with the ClassName with Realm使用 Realm 请求具有 ClassName 的 RLMObjects
【发布时间】:2015-02-09 18:05:30
【问题描述】:

我正在开发一个需要从 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 以访问请求函数。

【问题讨论】:

    标签: ios swift realm


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答,但我无法从 swift 代码访问它。此外,如果它不受支持,我会坚持下去。
    【解决方案2】:

    您可以使用 Realm 类中未记录的函数 dynamicObjects。

    例如:

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

    变成:

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

    他们在源代码中添加了一个警告:

    此方法仅在特殊情况下有用,例如, 在构建与 Realm 集成的组件时。如果你只是 在 Realm 上构建应用,推荐使用 typed 方法 objects(type:).

    返回领域中给定类名的所有对象。

    • 参数typeName:要返回的对象的类名。
    • 返回:给定类名的所有对象作为动态对象 :nodoc:

    我也花了很长时间才弄清楚这一点。不知道他们为什么选择不在文档中公开此方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多