2010-09-29 11 views
8

हाय मेरे पास संख्यात्मक विशेषताओं वाले कोर डेटा डेटाबेस हैं। वे NSNumbers हैं। डिफ़ॉल्ट मान 0.0 है, लेकिन जब मैं कुछ NSPredicated लाने करने की कोशिश, मैं प्राप्तएनएसपीडिकेट, एनएस संख्या संख्या विथफ्लैट: 0.0 (आईफोन)

: " 'NSInvalidArgumentException', कारण: 'अमान्य विधेय: शून्य आरएचएस'" सिर्फ इसलिए विशेषता मान 0.0

है विधेय के साथ बनाई गई है

[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)",startNSNumber,endNSNumber, idString] 

मैं इस समस्या को कैसे हल कर सकता हूं?

+1

कृपया पोस्ट करें कि आप भविष्यवाणी कैसे बना रहे हैं। –

+0

कृपया उस कोड को प्रदान करें जिसका उपयोग आप भविष्यवाणी करने के लिए करते हैं। – ohhorob

+0

predicate: [NSPredicate predicateWithFormat: @ "(startValue =>% @) और (endValue <% @) और (someId ==% @)", startNSNumber, endNSNumber, idString] – Greg

उत्तर

5

आप फ्लोट्स को ऑब्जेक्ट्स के रूप में जोड़ रहे हैं, फ्लोट के रूप में नहीं? इस प्रयास करें:

[NSPredicate predicateWithFormat:@"(startValue => %f) AND (endValue <= %f) AND (someId == %@)",startNSNumber,endNSNumber, idString]; 
+0

यदि यह एनएसएनंबर है, तो यह स्पष्ट रूप से काम नहीं करेगा। – Eiko

+1

'% f' का प्रयोग' फ्लोट 'आदिम के लिए किया जाता है। 'NSNumber' एक वस्तु है (जिसका अर्थ है कि'% @ 'इसके लिए सही प्रतिस्थापन है)। –

+0

ब्लास्ट, मैं प्रश्न पढ़ने में भूलना और सोचा था कि वह तैरता :(जोड़ने था – deanWombourne

1

ठीक है, विधेय आपके द्वारा दी गई दी, आसान जवाब है:

या तो startNSNumber, endNSNumber या idString नहीं के बराबर है। यदि आप NSPredicate में nil के विरुद्ध कुछ तुलना करना चाहते हैं, तो आपको [NSNull null] में nil में प्रतिस्थापित करने की आवश्यकता है।

+0

इसलिए यदि (startNSNumber) { [NSPredicate predicateWithFormat: @ "(startValue =>% @), startNSNumber] } else { [NSPredicate predicateWithFormat: @ "(startValue =>% @), [NSNull null] } ?? क्या यह सही होगा? – Greg

+0

नहीं, यह एनएसआईएनवालिडअर्ग्यूमेंट अपवाद है:/ – Greg

2

मैं दृढ़ता से लगता है कि आपके चर में से एक नहीं के बराबर है या autoreleased था ...

इस प्रयास करें:

NSNumber *num1 = [NSNumber numberWithFloat:2.0]; 
NSNumber *num2 = [NSNumber numberWithFloat:3.0]; 
NSString *str = @"Test"; 
[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)", num1, num2, str]; 

इस सफल होता है कि समस्या अपने चर के साथ है। शब्दकोश key.floatValue तैरने लगते हैं और आसानी से उपयोग के रूप में

[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)", num1 ? num1 : [NSNumber numberWithFloat:0.0], num2 ? num2 : [NSNumber numberWithFloat:0.0], idString]; 
+0

हाँ-.- 'मेरी समस्या तब होती है जब num1 या num2 है [NSNumber numberWithFloat: 0.0 ] लेकिन यह मान संभव और आवश्यक है, लेकिन एनएसपीडिकेट इसे पसंद नहीं करता है। अपवाद फेंकता है। क्यों ?! – Greg

+0

यह आश्चर्यजनक है, क्या आप सुनिश्चित हैं कि चर 'शून्य' नहीं है? मैंने ब्रेक के साथ एक टेस्ट कोड चलाया है बिंदु और '[NSNumber संख्या WithFloat: 0.0]' उचित 'NSNumber' ऑब्जेक्ट उत्पन्न करता है ... – Nick

+0

हाँ, दुर्भाग्य से मैं पूरी तरह से सुनिश्चित हूं :( – Greg

0

NSpredicate में उपयोग स्ट्रिंग मान:

आप या तो num1 या num2 कभी कभी nil होने की उम्मीद है, तो आप विधेय के रूप में फिर से लिखने सकता है।

[NSPredicate predicateWithFormat:@"(startValue.floatValue => %f) AND (endValue.floatValue <= %f) AND (someId == %@)",startNSNumber,endNSNumber, idString] 

मुझे यह पोस्ट उपयोगी है।

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