2011-09-24 14 views
32

के साथ तुलना करें तुलनात्मक रूप से मैं दो एनएसएनबर्स या एनएसएनंबर और एक इंटीजर की तुलना कैसे कर सकता हूं?एनएसपी्रेडिकेट इंटीजर

मैंने कोशिश की:

NSNumber *stdUserNumber = [NSNumber numberWithInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"standardUser"]]; 
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userID == %@", stdUserNumber]; 

खैर, यह काम नहीं करता है ... किसी को भी एक विचार है कि यह कैसे करना है? मुझे यकीन है कि यह बहुत आसान है लेकिन मुझे कुछ भी नहीं मिला ...

उत्तर

82

NSNumber एक ऑब्जेक्ट प्रकार है। NSString के विपरीत, NSNumber का वास्तविक मान प्रतिस्थापित नहीं किया गया है जब %@ प्रारूप के साथ उपयोग किया जाता है। आपको पूर्वनिर्धारित विधियों का उपयोग करके वास्तविक मान प्राप्त करना होगा, जैसे intValue जो पूर्णांक मान देता है। और प्रारूप प्रतिस्थापन का उपयोग %d के रूप में करें क्योंकि हम एक पूर्णांक मान को प्रतिस्थापित करने जा रहे हैं।

विधेय होना चाहिए,

predicateWithFormat:@"userID == %d", [stdUserNumber intValue]]; 
+0

ग्रेट बहुत बहुत धन्यवाद! क्या इन सभी% d% i% @% ... "शॉर्टकट्स" की एक सूची है? – wolfrevo

+1

... इससे कोई फर्क नहीं पड़ता है। अनुमानित प्रारूप पार्सर प्रारूप स्ट्रिंग में '% d' देखेंगे,' va_list' से 'int' पॉप करें, और उसके बाद इसे 'NSNumber' में बॉक्स करें। –

+0

यह अजीब बात है क्योंकि मैंने यह भी कोशिश की: fetchRequest.predicate = [NSPredicate predicateWithFormat: @ "userID ==% i", [[NSUserDefaults standardUserDefaults] integerForKey: @ "standardUser"]]]; और यह काम नहीं किया ... तो यह% d होना चाहिए! ... वैसे भी, यह अब काम कर रहा है :) – wolfrevo

2

आप predicateWithSubstitutionVariables उपयोग कर रहे हैं: और मूल्य आप विधेय करना चाहते पूर्णांक मान के साथ NSNumber है तो आप NSNumber प्रतिस्थापन मूल्य के रूप में NSString के बजाय विधेय में उपयोग करने के लिए की जरूरत है। उदाहरण पर एक नज़र डालें:

NSPredicate *genrePredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"genreID == $GENRE_ID"]]; //if we make only one NSPredicate if would look something like this: [NSPredicate predicateWithFormat:@"genreID == %d", [someString integerValue]]; 

NSPredicate *localPredicate = nil; 
for(NSDictionary *genre in genresArray){ 
    localPredicate = [genrePredicate predicateWithSubstitutionVariables:@{@"GENRE_ID" : [NSNumber numberWithInteger:[genre[@"genre_id"] integerValue]]}]; 
} 
संबंधित मुद्दे