2010-09-29 23 views
8

Merhaba, sayısal özniteliklere sahip Core Data veritabanım var. onlar NSNumbers. Varsayılan değer 0.0 olduğunu ama bazı NSPredicated getirme yapmaya çalıştığınızda, i almakNSPredicate, NsNumber numberWithFloat: 0.0 (iPhone)

: özellik değeri 0.0

sırf " 'NSInvalidArgumentException', nedeni:: 'Geçersiz yüklemi RHS nil'" yüklem ile oluşturulur

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

Bu sorunu nasıl çözebilirim?

+1

Lütfen yüklemeyi nasıl oluşturdunuz. –

+0

Lütfen yüklemeyi yapmak için kullandığınız kodu sağlayın. – ohhorob

+0

yüklemi: [NSPredicate predicateWithFormat: @ "(startValue =>% @) VE (endValue <% @) VE (bazıI ==% @)", startNSNumber, endNSNumber, idString] – Greg

cevap

5

Şamandıraları şamandıra olarak değil, nesne olarak mı ekliyorsunuz? Bu deneyin:

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

NSNumber ise, bu açıkça işe yaramaz. – Eiko

+1

'% f',' float' primitif için kullanılır. “NSNumber” bir nesnedir (yani,% @ 'nin bunun için doğru ikame olduğu anlamına gelir). –

+0

Blast, Soru oynanırsa o yüzen :(ekleyerek düşündüm – deanWombourne

1

Eh, sağlanan yüklem göz önüne alındığında, kolay cevap:

Ya startNSNumber, endNSNumber veya idString sıfırdır. Bir NSPredicate numaralı telefona nil karşı bir şey karşılaştırmak istiyorsanız, nil değil [NSNull null] yerine gerekir.

+0

böylece (startNSNumber) { [NSPredicate predicateWithFormat: @ "(startvalue =>% @), startNSNumber] } else if { [NSPredicate predicateWithFormat: @ "(startValue =>% @), [NSNull null] } Evet? – Greg

+0

no NSInvalidArgumentException yeniden:/ – Greg

2

şiddetle

bu deneyin ... değişkenlerinizin biri yoktur ya da autoreleased inanıyoruz:

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]; 

bu sorun değişkenler olduğunu başarılı olursa. kullanmak kolayca Sözlük key.floatValue yüzer gibi

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

evet -.- 'num1 veya num2 değeri [NSNumber numberWithFloat: 0.0 olduğunda ] ama bu değer mümkün ve gereklidir, ancak NSPredicate bunu sevmez.Özellikler atıyor.Neden ?! – Greg

+0

oldukça şaşırtıcı, değişkenin "nil" olmadığından emin misiniz? Bir mola ile bir test kodu çalıştırdım point ve '[NSNumber numberWithFloat: 0.0]' düzgün bir 'NSNumber' nesnesini oluşturur ... – Nick

+0

evet, maalesef tamamen eminim :( – Greg

0

NSpredicate İÇİNDE kullanım dize değeri: Bazen nil olmak num1 veya num2 ya bekliyorsanız

, o zaman olduğu gibi yüklemi baştan yazabilir. Bu postayı faydalı buluyorum.