2015-02-09 71 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:

帶我永遠摸不着頭腦也是如此。不知道他們爲什麼選擇不在文檔中公開此方法。

相關問題