2016-01-21 9 views
11

के साथ इनका उपयोग कैसे करें मेरे पास रियलम ऑब्जेक्ट्स (चलिए उपयोगकर्ता कहें) की एक सूची है और मैं उन सभी को पुनः प्राप्त करना चाहता हूं लेकिन "जॉन", "मार्क", "अल 'मेड" और इसी तरह।रीयल स्विफ्ट

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) साथ करने की कोशिश की, लेकिन यह दुर्घटना होगा (अपवाद उठाया):

मैं निम्नलिखित की कोशिश की।

और दूसरी बात, मुझे एनएसपी्रेडिकेट में नामों से बचने का तरीका कैसा लगता है। यदि किसी नाम में ' वर्ण है, तो यह शायद काम नहीं करेगा।


संपादित

ले लिए धन्यवाद गाया, यहां कार्यात्मक परिणाम है:

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

काम करना चाहिए क्या ' एस [uiRealm। वस्तुओं (छवि)]? –

+0

@NguyenHoan यह एक टाइपो है, 'uiRealm.objects (उपयोगकर्ता) होना चाहिए' – Kalzem

+0

संभावित डुप्लिकेट: "स्विफ्ट के भीतर दायरे का उपयोग कैसे नहीं करें"/जेके –

उत्तर

20

Realm document के अनुसार, इन तरीकों

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

बिल्कुल सही! मैंने दस्तावेज को गलत समझा जब उसने कहा 'नाम' {लिसा ',' स्पाइक ',' हैची '} '। और मुझे अब भी एक स्ट्रिंग में सरणी को संगत करने की आवश्यकता नहीं है! – Kalzem

+0

आप एक सरणी का भी उपयोग कर सकते हैं – onmyway133

संबंधित मुद्दे