2013-03-19 14 views
8

सेट करके गतिशील रूप से एनएसपीडिकेट बनाना, बाद के बाद वाले स्निपेट का पूर्व क्यों काम करता है?कुंजी प्रोग्रामेटिक रूप से

स्निपेट 1

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(coin_unique == %@)", [NSNumber numberWithInt:species]]; 

स्निपेट 2

// Does NOT Work 
NSString *predicateText = @"coin_unique"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%@ == %@)", predicateText, [NSNumber numberWithInt:species]]; 

मैं गतिशील तर्क के आधार पर विधेय बनाने के लिए मेरी विधि में प्राप्त किया।

उत्तर

18

coin_unique एक महत्वपूर्ण है, इसलिए यह %K फॉर्मेट स्पेसिफायर की जरूरत है:

NSString *predicateText = @"coin_unique"; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%K == %@)", predicateText, [NSNumber numberWithInt:species]]; 

प्रारूप वाक्य रचना बहुत अच्छी तरह से here वर्णन किया गया है।

0

मुझे निम्न त्रुटि मिली है, भले ही मेरा एनएसपीडिकेट सही रूप से स्वरूपित किया गया हो।

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Insufficient arguments for conversion characters specified in format string.' site:stackoverflow.com 

एक मूर्ख मैं विधेय प्रारूप करने के लिए एक दूसरा तर्क पारित करने के लिए भूल गया (क्योंकि वहाँ दो %@ थे) की तरह। अर्थात। NSPredicate(format:predicateFormat,argumentArray:[Date()]) में सरणी में केवल एक तत्व है जब इसे दो होना चाहिए: [Date(), Date()]

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