web-dev-qa-db-ja.com

レルムでNOTINを使用する方法Swift

Realmオブジェクト(たとえばUser)のリストがあり、「John」、「Marc」、「Al'Med」などを除くすべてのオブジェクトを取得したいと思います。

私は以下を試しました:

_var namesStr = ""
for user in unwantedUsers {
    namesStr += "'" + user.name + "', "
}
namesStr = String(namesStr.characters.dropLast().dropLast())
let predicate = NSPredicate(format: "NOT name IN {%@}", namesStr)
let remainingUsers = uiRealm.objects(User).filter(predicate)
_

NSPredicate(format: "name NOT IN {%@}", namesStr)も試してみましたが、クラッシュしました(例外が発生しました)。

そして2番目のこと、NSPredicateの名前をどのようにエスケープすると思いますか。名前の1つに'文字が含まれている場合、おそらく機能しません。


[〜#〜]編集[〜#〜]

LE SANGのおかげで、機能的な結果は次のようになります。

_var userArr: [String] = []
for user in unwantedUser {
    userArr.append(user.name)
}
let predicate = NSPredicate(format: "NOT name IN %@", userArr)
let remainingUsers = uiRealm.objects(User).filter(predicate)
_
15
Kalzem

レルムドキュメント によると、これらの方法は機能するはずです

let predicate = NSPredicate(format: "NOT (name IN %@)", namesStr)
let predicate = NSPredicate(format: "!(name IN %@)", namesStr)
let predicate = NSPredicate(format: "NOT name IN %@", namesStr)
32
LE SANG