具有空 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 属性是动态的。