具有空 RLMArray 的领域 returns 对象 属性
Realm returns object with empty RLMArray as property
我有classCountry
。它是 RLMObject 的简单子class。基本上,当我保存 Country
时,它们确实有 regions
(属性 类型的 RLMArray 包含几个区域类型的对象。它们是 RLMObject subclass)但是当我'我从 Realm 获取它然后 regions
为零。
我用浏览器仔细检查了领域,那些数据在那里。也许我使用了错误的技术来获取这些数据?
此时我使用 realm-objc 因为我必须支持设备
国家(27行)
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 行)
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
}
}
尝试将 public var regions
更改为 dynamic public var regions
,因为 Realm 要求 RLMArray
属性是动态的。
我有classCountry
。它是 RLMObject 的简单子class。基本上,当我保存 Country
时,它们确实有 regions
(属性 类型的 RLMArray 包含几个区域类型的对象。它们是 RLMObject subclass)但是当我'我从 Realm 获取它然后 regions
为零。
我用浏览器仔细检查了领域,那些数据在那里。也许我使用了错误的技术来获取这些数据?
此时我使用 realm-objc 因为我必须支持设备
国家(27行)
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 行)
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
}
}
尝试将 public var regions
更改为 dynamic public var regions
,因为 Realm 要求 RLMArray
属性是动态的。