I have class Country. It's a simple subclass of RLMObject. Basically when I'm saving Country then they do have regions (property of type RLMArray containing several object of type Region. Which are RLMObject subclass) but when I'm fetching it from Realm then regions are nil.
I've double check realm with browser and those data are there. Maybe I'm using wrong technique to fetch those data?
At this point I use realm-objc because I have to support devices with
Country (27 lines)
public class Country: RLMObject {
public dynamic var name = ""
public dynamic var desc = ""
public dynamic var id = 0
public var regions = RLMArray(objectClassName: Region.className())
override public static func primaryKey() -> String? {
return "id"
}
override init!() {
super.init()
}
public func configure(id:Int,json:JSON){
self.name = json["name"].stringValue
if let desc = json["desc"].string {
self.desc = desc
}
for (key:String, value:JSON) in json["regions"] {
let region = Region()
region.configure(key.toInt()!,json:value)
self.regions.addObject(region)
}
self.id = json["id"].intValue
}
}
CountryManager (36 lines)
public class CountryManager: NSObject {
public func saveWines(json:JSON) {
var countriesForStore = [Country]()
let db = RLMRealm.defaultRealm()
for (key:String, subJson:JSON) in json{
let country = Country() //Serialize each country
country.configure(key.toInt()!,json:subJson)
countriesForStore.append(country)
}
db.beginWriteTransaction()
db.addOrUpdateObjectsFromArray(countriesForStore)
db.commitWriteTransaction()
}
public func regionsForCountryWithNameLike(name:String) -> RLMResults {
let db = RLMRealm.defaultRealm()
let countryPredicate = NSPredicate(format: "name CONTAINS[c] %@", name)
let countries = Country.objectsWithPredicate(countryPredicate)
var rawRegionNames = [String]()
for country in countries {
if let c = country as? Country {
for region in c.regions{
rawRegionNames.append((region as! Region).name)
}
}
}
let regionNames = "','".join(rawRegionNames)
let regionPredicate = NSPredicate(format: "name IN {'\(regionNames)'}")
let regions = Region.objectsInRealm(db, withPredicate: regionPredicate)
return regions
}
}