2016-01-21 19 views
11

Tôi có một danh sách các đối tượng Realm (giả sử User) và tôi muốn lấy tất cả chúng nhưng "John", "Marc", "Al 'Med" và cứ thế.Làm thế nào để sử dụng NOT IN với Realm Swift

tôi thử như sau:

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) 

Tôi cũng đã cố gắng với NSPredicate(format: "name NOT IN {%@}", namesStr) nhưng nó sẽ sụp đổ (ngoại lệ huy động).

điều thứ hai, tôi giả sử như thế nào để thoát khỏi các tên trong NSPredicate. Nếu một trong các tên có ký tự là ' thì có thể sẽ không hoạt động.


EDIT

Nhờ LÊ SANG, đây là kết quả chức năng:

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) 
+0

gì ' s [uiRealm. đối tượng (Hình ảnh)]? –

+0

@NguyenHoan Đó là lỗi đánh máy, phải là 'uiRealm.objects (Người dùng)' – Kalzem

+0

Có thể trùng lặp: "Cách KHÔNG sử dụng Realm trong Swift"/jk –

Trả lời

20

Theo Realm document, những cách này nên làm việc

let predicate = NSPredicate(format: "NOT (name IN %@)", namesStr) 
let predicate = NSPredicate(format: "!(name IN %@)", namesStr) 
let predicate = NSPredicate(format: "NOT name IN %@", namesStr) 
+0

Hoàn hảo! Tôi hiểu lầm tài liệu khi nó nói 'tên IN {‘Lisa’, ‘Spike’, ‘Hachi’} '. Và tôi thậm chí không cần phải concat mảng vào một chuỗi nữa! – Kalzem

+0

Bạn cũng có thể sử dụng một mảng – onmyway133

Các vấn đề liên quan