Как запросить список <Int>в Realm Swift - PullRequest
0 голосов
/ 10 января 2019

Как я могу отфильтровать RealmFilter.objectIds, который имеет данный Int?

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"
    }
  }

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Это может быть совсем не то, что вы хотите, но это было хорошее упражнение. Может быть, это поможет.

Позвольте мне перефразировать то, что, по-моему, вы спрашиваете: у вас есть ряд объектов, каждый из которых имеет свойство List типа Int, и вы хотите иметь возможность запрашивать все объекты, для которых есть конкретный тип 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])

Как я уже сказал, он может быть неосновным, но он предоставляет решение более объектно-ориентированным способом.

0 голосов
/ 10 января 2019

Запрос List примитивов (то есть не Object подклассов, таких как Int в вашем случае) пока не поддерживается Realm.

Вы можете следить за статусом этого на этом выпуске GitHub .

...