问题
I'm trying to query a class based on the number of match objects. However, I keep getting following error 'Unable to parse the format string "matches.@count > 0"'. I've tried following code from the documentation, but it does not help. What I want is to get all leagues, which has more than 0 matches?
Class
class League:Object {
dynamic var id: Int = 0
dynamic var name: String? = ""
var matches = List<Match>()
override class func primaryKey() -> String {
return "id"
}
}
class Match:Object {
dynamic var matchId: Int = 0
dynamic var date: NSDate = NSDate()
dynamic var homeName: String? = ""
dynamic var awayName: String? = ""
dynamic var homeAcro: String? = ""
dynamic var awayAcro: String? = ""
dynamic var awayScore: Int = 0
dynamic var homeScore: Int = 0
dynamic var leagueName: String? = ""
dynamic var homeLogo: NSData = NSData()
dynamic var awayLogo: NSData = NSData()
override class func primaryKey() -> String {
return "matchId"
}
}
Tried code
let realm = try! Realm()
let predicate = NSPredicate(format: "matches.@count > 0")
menuArray = realm.objects(League).sorted("id").filter(predicate)
回答1:
MATCHES is a reserved word in the NSPredicate syntax. You can prefix reserved words with a # to escape them, like so:
let realm = try! Realm()
let predicate = NSPredicate(format: "#matches.@count > 0")
menuArray = realm.objects(League).sorted("id").filter(predicate)
来源:https://stackoverflow.com/questions/33742434/filter-realm-objects-based-on-counting-listt