2014-09-03 10 views
11

मैं कई स्थितियों के साथ एक एनएसपी्रेडिकेट बनाने की कोशिश कर रहा हूं। मुझे कई समाधान मिल गए हैं, लेकिन उनमें से कोई भी मेरी विधि के साथ काम नहीं कर रहा है। सबसे अच्छा दिखने वाला मुझे नीचे दिया गया है।एकाधिक स्थितियों के साथ एनएसपीडिकेट

यह मेरा एक विधेय तरीका है, और यह सिर्फ ठीक काम करता है:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", 
searchText]; 
filteredBusinesses = [businesses filteredArrayUsingPredicate:predicate]; 

यहाँ कई शर्तों के साथ मेरी संपादित संस्करण है। मुझे यकीन नहीं है कि क्या गलत हो रहा है। कोई विचार?

NSPredicate *p1 = [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText]; 
NSPredicate *p2 = [NSPredicate predicateWithFormat:@"businessArea contains[c] %@", 
searchText]; 

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[p1, p2]]; 
filteredBusinesses = [businesses filteredArrayUsingPredicate:predicate]; 
+0

आप क्या उम्मीद कर रहे हैं और क्या कर रहे हैं तुम हो रही हो – bhargavg

+0

मैं अपने खोजबार्डलेज में कई प्रकार की जानकारी टाइप करने की क्षमता की अपेक्षा कर रहा था। इसके बजाए, इसकी दुर्घटनाग्रस्त हो रही है :( – Brandon

+1

अपना स्टैकट्रैक पेस्ट करें – bhargavg

उत्तर

12

आप इस

कोशिश कर सकते हैं
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[p1, p2]]; 
+0

ने इसे दबाया !!! बहुत बहुत धन्यवाद! – Brandon

+0

... एक 'या' predicate एक 'और' predicate के समान नहीं है। –

1

आपके द्वारा पोस्ट किए गए कोड में कुछ भी गलत नहीं लगता है, जिसका अर्थ यह है कि जब आप सरणी फ़िल्टर करके अनुमान का मूल्यांकन करते हैं तो त्रुटि शायद आ रही है।

पहले अनुमानित कार्यों के बाद, समस्या businessArea कुंजी पथ के साथ है।

सरणी फ़िल्टर करना है, तो एक अपवाद फेंक होगा:

  1. सरणी में एक वस्तु
  2. (के रूप में, यह एक वस्तु एक -businessArea विधि है कि नहीं है) कि एक businessArea मूल्य नहीं है नहीं है वस्तु एक businessArea मूल्य है, लेकिन मूल्य न तो एक NSString है और न ही nil
7

@ निकुनज के उत्तर में वृद्धि, आप अपने और इस तरह के संचालन के लिए एनएससीओम्पाउंड क्रेडिट का भी उपयोग कर सकते हैं।

Obj सी - और

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"X == 1"]; 
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"X == 2"]; 
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicate1, predicate2]]; 

स्विफ्ट - और

let predicate1:NSPredicate = NSPredicate(format: "X == 1") 
let predicate2:NSPredicate = NSPredicate(format: "Y == 2") 
let predicate:NSPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate1,predicate2]) 

स्विफ्ट 3 - और

let predicate1 = NSPredicate(format: "X == 1") 
    let predicate2 = NSPredicate(format: "Y == 2") 
    let predicateCompound = NSCompoundPredicate.init(type: .and, subpredicates: [predicate1,predicate2]) 
संबंधित मुद्दे