8

こんにちは、数値属性を持つ Core Data データベースがあります。それらは NSNumber です。デフォルト値は 0.0 ですが、NSPredicated フェッチを実行しようとすると、属性値が 0.0 であるため、「'NSInvalidArgumentException', reason: 'Invalid predicate: nil RHS'」が表示されます

述語は次のように作成されます。

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

どうすればこの問題を解決できますか?

4

4 に答える 4

5

フロートとしてではなく、オブジェクトとしてフロートを追加していますか? これを試して :

[NSPredicate predicateWithFormat:@"(startValue => %f) AND (endValue <= %f) AND (someId == %@)",startNSNumber,endNSNumber, idString];
于 2010-09-29T16:40:33.980 に答える
2

あなたの変数の1つがnilであるか、自動解放されていると強く信じています...

これを試して:

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

これが成功した場合、問題は変数にあります。

num1どちらかまたは時々あると予想num2されるnil場合は、述語を次のように書き直すことができます。

[NSPredicate predicateWithFormat:@"(startValue => %@) AND (endValue <= %@) AND (someId == %@)", num1 ? num1 : [NSNumber numberWithFloat:0.0], num2 ? num2 : [NSNumber numberWithFloat:0.0], idString];
于 2010-09-29T19:10:16.690 に答える
1

さて、あなたが提供した述語を考えると、簡単な答えは次のとおりです。

startNSNumberendNSNumberまたはnilidStringです。で何かを比較したい場合はnil、ではなくNSPredicateで置き換える必要があります。[NSNull null]nil

于 2010-09-29T16:41:43.973 に答える