2010-10-15 16 views
9

के साथ एनएसपीडिकेट समस्या मैं एनएसपी्रेडिकेट का उपयोग कर एक टेबल से पूछताछ करने का प्रयास कर रहा हूं। ("Something_id == 2")कॉलम नाम

NSNumber *value = [NSNumber numberWithInteger: 2]; 
NSString *columnName = @"something_id"; 

NSLog(@"%@ == %@", columnName, value); 
NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"%@ == %@", columnName, value]; 

NSLog बाहर प्रिंट मैं क्या उम्मीद है, लेकिन विधेय काम नहीं करता है: यहाँ अनिवार्य रूप से मैं क्या कर रहा है।

NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"something_id == %@", value]; 

तो क्यों यह काम और मैं इसे कैसे ठीक कर सकते हैं नहीं होगा: हालांकि, विधेय अगर मैं इसे करने के लिए बदल कार्य करता है?

+0

यह बहुत अजीब है ... मेरे साथ भी होता है .. –

उत्तर

30

The Predicate Programming Guide from Apple का कहना है:

% @ एक वस्तु के लिए एक वर आर्ग प्रतिस्थापन मूल्य अक्सर एक है स्ट्रिंग, संख्या, या दिनांक।

% के एक महत्वपूर्ण मार्ग के लिए एक var arg substitution है।

जब स्ट्रिंग चर को स्ट्रिंग में% @ का उपयोग करके प्रतिस्थापित किया गया है, तो वे उद्धरण चिह्नों से घिरे हुए हैं। यदि आप एक गतिशील प्रॉपर्टी नाम निर्दिष्ट करना चाहते हैं, तो प्रारूप स्ट्रिंग में % K का उपयोग करें।

तो, आपके मामले में, आप columnName करने के लिए एक मुख्यपथ के रुप में% कश्मीर लगाने की जरूरत है, नहीं% @ जो उद्धरण चिह्नों के साथ जोड़ दिया जाएगा:

NSPredicate *refQuery = [NSPredicate predicateWithFormat: @"%K == %@", columnName, value]; 

आशा यह आपके संदेह साफ़ करें।

+0

FWIW आप शायद भविष्य के दोनों किनारों पर% K का उपयोग करना चाहते हैं, क्योंकि पूर्णांक प्रतिस्थापन डबल कोट्स में गलती से लपेटा जाएगा। – ImHuntingWabbits

+0

नहीं, मान एक पूर्णांक नहीं है, लेकिन यह एक NSNumber है, जैसा कि आप दस्तावेज़ में देख सकते हैं, यह सही प्रारूप है। –

+0

धन्यवाद, मुझे एक दर्दनाक सिरदर्द से बचाया। :) –

1

बहुत अजीब है, लेकिन मुझे लगता है मैं निम्न कार्य करके इसे हल किया है:

NSNumber *value = [NSNumber numberWithInteger: 2]; 
NSString *columnName = @"something_id"; 

NSString *predicate = [NSString stringWithFormat: @"%@ == %@", columnName, value]; 
NSPredicate *refQuery = [NSPredicate predicateWithFormat: predicate]; 
+0

यदि कोई ऐसा क्यों करता है तो कुछ प्रकाश डाला जा सकता है, तो मैं बहुत आभारी हूं। – henryeverett

+0

क्योंकि यहां आप "something_id == 2" देते हैं, यदि आप स्ट्रिंग को प्रारूपित करने की भविष्यवाणी करते हैं, तो यह आउटपुट करेगा: "something_id" == 2, इसलिए फ़ील्ड एक स्ट्रिंग बन जाएगा और उद्धरण के बिना फ़ील्ड नहीं होगा – Climbatize

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