如何过滤具有给定Int的RealmFilter.objectIds?
func delete(ids: [Int]) {
let filterResultsToDelete = realm.objects(CRMRealmFilterResult.self).filter("ANY objectIds IN %@",ids)
//Crashes
}
class RealmFilterResult : Object {
@objc dynamic var filterId: Int = 0
let objectIds = List<Int>()
override static func primaryKey() -> String {
return "filterId"
}
}
答案 0 :(得分:0)
Realm尚不支持查询基元(即非List
子类,例如Object
的基元)的Int
。
您可以在this GitHub issue上关注其状态。
答案 1 :(得分:0)
这可能根本不是您想要的,但这是一个很好的练习。也许这会有所帮助。
让我重申一下我想您要问的问题:您有一系列对象,每个对象都具有Int的List属性,并且您希望能够查询其对象中具有特定int的所有对象。列表
使用一个更真实的示例,假设我们有一个球队列表,并且我们保留了每个球队内的比赛得分列表(一个列表)
class TeamObject: Object {
@objc dynamic var object_id = NSUUID().uuidString
let scoreList = List<ScoreObject>()
override static func primaryKey() -> String? {
return "object_id"
}
}
我们有一个得分对象,该得分对象将得分存储为Int(以及其他详细信息,例如他们玩的人或日期)
class ScoreObject: Object {
@objc dynamic var score = 0
let teamsWithScores = LinkingObjects(fromType: TeamObject.self, property: "scoreList")
}
为简单起见,让我们创建三个得分和两个团队,并在列表中给每个团队两个得分。
let score1 = ScoreObject()
score1.score = 1
let score2 = ScoreObject()
score2.score = 2
let score3 = ScoreObject()
score3.score = 3
let t1 = TeamObject()
t1.scoreList.append(score1)
t1.scoreList.append(score3)
let t2 = TeamObject()
t2.scoreList.append(score2)
t2.scoreList.append(score3)
并将其写入领域
try! realm.write {
realm.add(t1)
realm.add(t2)
}
从那里,我们可以获得得分为1的任何团队,这解决了获取具有包含给定int列表的对象的问题。
let results = realm.objects(ScoreObject.self).filter("score IN %@", [1])
if results.count > 0 {
for aScore in results {
let teamsWithThisScore = aScore.teamsWithScores
for team in teamsWithThisScore {
print("score: \(aScore.score)")
print(" id: \(team.object_id)")
}
}
} else {
print("no teams with those scores")
}
您可以在此基础上扩展以获得具有多个得分(整数)的团队(对象)
let results = realm.objects(ScoreObject.self).filter("score IN %@", [1,3])
就像我说的那样,它可能不是基础,但确实以面向对象的方式提供了解决方案。