2013-01-02 41 views
6

अब मुझे एनएसपी्रेडिकेट में सिंगल कोट (') समस्याएं आ रही हैं।एनएसपी्रेडिकेट सिंगल कोट इश्यू

NSPredicate *query = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"s_name='%@' AND s_regno=%d",Name,[RegNo intValue]]]; 

जब मैं को फ़िल्टर करके, "जॉन", यह ठीक है और सभी में कोई त्रुटि:

यहाँ मेरी क्वेरी है। लेकिन मैं नाम, "मैरी" मनी का उपयोग करता हूं। यहाँ एक त्रुटि है।

मुझे संदेह है कि यह एकल उद्धरण के कारण है। कृपया मुझे इस मुद्दे को दूर करने में मदद करें।

धन्यवाद

उत्तर

1

नाम = @ "बेल का", तो आप इस तरह विधेय बनाने की कोशिश कर सकते हैं:

NSPredicate *query = [NSPredicate predicateWithFormat:@"name == \"%@\"", name]; 

बस दोहरे उद्धरण चिह्नों के साथ मानक एकल उद्धरण की जगह।

+3

और यदि आपके इनपुट स्ट्रिंग में डबल कोट्स हैं, तो क्या? – northernman

12

त्वरित सुधार के रूप में, आप सभी को एक NSString भाग की जरूरत नहीं होनी चाहिए। यह प्रतिस्थापन predicateWithFormat: विधि का पूरा बिंदु है! बस उपयोग करें:

NSPredicate *query = [NSPredicate predicateWithFormat:@"s_name == %@ AND s_regno == %d", Name, [RegNo intValue]]; 

मुझे प्रारूप तारों से पूरी तरह से बचना पसंद है, और इसके बजाय कोड में अनुमान बनाएं।

NSPredicate *nameQuery = 
[NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"s_name"] 
            rightExpression:[NSExpression expressionForConstantValue:Name] 
              modifier:NSDirectPredicateModifier 
               type:NSLikePredicateOperatorType 
              options:NSCaseInsensitivePredicateOption|NSDiacriticInsensitivePredicateOption]; 

NSPredicate *regNoQuery = 
[NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"s_regno"] 
            rightExpression:[NSExpression expressionForConstantValue:RegNo] 
              modifier:NSDirectPredicateModifier 
               type:NSEqualToPredicateOperatorType 
              options:0]; 

NSPredicate *query = [NSCompoundPredicate andPredicateWithSubpredicates:@[nameQuery,regNoQuery]]; 

ध्यान दें कि मैं NSCaseInsensitivePredicateOption|NSDiacriticInsensitivePredicateOption जोड़े गए नाम पर एक केस और विशेषक-संवेदी तुलना करने के लिए, s_name like[cd] %@ में के रूप में। यदि आपको इसकी आवश्यकता नहीं है, तो आप निश्चित रूप से type:NSEqualToPredicateOperatorType और options:0 का उपयोग कर सकते हैं।

+0

आपका "त्वरित समाधान" सही उत्तर है। –

+0

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। – northernman