3

私のコードでは、レコードが既に存在するかどうかを確認して確認したいので、レコードを作成するか更新するかを知っています。しかし、私は問題に遭遇しました。問題は、これを使用するときです。

NSPredicate *pred = [NSPredicate predicateWithFormat:@"%@ == %@", ATTRIBUTE_ID, idNumber];
[request setPredicate:pred];

これはうまくいきません。結果が見つからなかったと常に主張します。ただし、次のように書き直すと問題なく動作します。

NSExpression *lhs = [NSExpression expressionForKeyPath:ATTRIBUTE_ID];
NSExpression *rhs = [NSExpression expressionForConstantValue:idNumber];
NSPredicate *pred = [NSComparisonPredicate
                                     predicateWithLeftExpression:lhs
                                     rightExpression:rhs
                                     modifier:NSDirectPredicateModifier
                                     type:NSEqualToPredicateOperatorType
                                     options:0];
[request setPredicate:pred];

フォーマット文字列で何が欠けているか、間違っていますか?

4

1 に答える 1

5

YourATTRIBUTE_IDはキーであるため%K、その部分のフォーマット文字列で使用する必要があります。

フォーマット文字列は次のようになります (コメントで指摘されている大文字の K)。

[NSPredicate predicateWithFormat:@"%K == %@", ATTRIBUTE_ID, idNumber];
于 2012-09-13T20:07:36.750 に答える