web-dev-qa-db-ja.com

CoreDataで単一の結果を持つ大文字と小文字を区別しないNSPredicate

これが私の現在のNSPredicateです。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode];

この大文字と小文字を区別しないようにするにはどうすればよいですか?

そして、部分的なマッチングは行いたくありません。

たとえば、UPCCodeに123と入力した場合、123、123a、123b、123cなどを取得したくありません。完全に一致したいだけです。

私はこれを行うことを考えましたが、それは少しばかげているようです:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@ OR UPC==%@ OR ItemID==%@", aUPCCode,aUPCCode,[ aUPCCode lowercaseString] ,[aUPCCode lowercaseString], [aUPCCode uppercaseString],[aUPCCode uppercaseString]];
46
Slee

Dave DeLongが言ったように、以下を使用できます。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"UPC ==[c] %@ OR ItemID ==[c] %@", aUPCCode,aUPCCode];

編集

使用する ==[c] の代わりに ==[cd]またはアクセントも取得します(abcd == àbcd)。

82
Sinetris

Sinetrisが言ったように、上記はObjective-Cで機能します。

大文字と小文字を区別しません。 「example」文字列値を含むすべての結果をフェッチします。

更新Swift 4.

let predicateIsNumber = NSPredicate(format: "keywordContactNo contains[c] %@", example!) 

それが役に立てば幸い

ありがとう

2
Harjot Singh

多分これ:

[NSPredicate predicateWithFormat:@"UPC MATCHES[cd] %@ OR ItemID MATCHES[cd] %@",aUPCCode,aUPCCode];
0