2015-02-09 2 views
1

Я разрабатываю приложение, которое необходимо синхронизировать с файлами JSON. Эти файлы являются plist, созданными после вызова службы конечных точек.Запрос RLMObjects с ClassName с Realm

Таким образом, каждый файл имеет имя ClassName и содержит все объекты этого типа. Поэтому я пытаюсь открыть все файлы и сохранить/обновить/удалить все эти объекты в моей области db.

Моего некрасивое решения на данный момент является для перебора схемы царства и использовать переключатель, чтобы соответствовать сущностям имени класса:

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 только с именем класса? Что-то из RLMRealm (например: RLMRealm.defaultRealm().allObjectsWithClassName("Class1")) или создание RLMObject с именем класса, чтобы иметь доступ к функциям запроса.

ответ

1

Там в частном порядке, без поддержки метод на RLMRealm (объявленная в RLMRealm_Dynamic.h, что вы можете использовать -. - (RLMResults *)allObjects:(NSString *)className; я должен предупредить вас, однако, что этот метод является приватным и в настоящее время не поддерживается

+0

Спасибо за ответ, но я не могу получить к нему доступ из быстрого кода. Кроме того, если он не поддерживается, я буду застрять с ним. – Pintouch

0

Вы можете использовать недокументированные. функция dynamicObjects из класса Realm

Например:.

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

сТАНОВИТСЯ:

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

Они положили предостережение в исходном коде:

Этот метод полезен только в специализированных условиях, например, при создании компонентов, которые интегрируются с Realm. Если вы просто создаете приложение на Realm, рекомендуется использовать типизированный метод objects(type:).

Возвращает все объекты для данного имени класса в Царстве.

  • параметр typeName: Имя класса возвращаемых объектов.
  • возвращается: Все объекты для данного имени класса как динамических объектов : nodoc:

Взял меня навсегда, чтобы понять это, как хорошо. Не знаете, почему они решили не подвергать этот метод в документации.