1

検索ボックスにキーワードを入力すると、次のエラーが発生します。

キャッチされなかった例外'NSInvalidArgumentException'が原因でアプリを終了しています、理由:'フォーマット文字列"(title CONTAINS[c]'hj'"を解析できません

任意の文字列(この場合は「hj」)の後にアポストロフィ(またはアポストロフィを含む)を入力します。アポストロフィなし-エラーなし。

これは私がしたことです:

(void)filter:(NSString*)keyword{
    NSString* predicateString = [NSString stringWithFormat:@"(title CONTAINS[c] '%@')", keyword];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
    self.filteredArray = [self.initialArray filteredArrayUsingPredicate:predicate];
} 

私が言ったように、アポストロフィ文字がキーワードに含まれていない場合、コードは機能します。

4

4 に答える 4

12

サバ、これを試してください:

(void)filter:(NSString*)keyword{
    NSString *keywordWithBackslashedApostrophes = [keyword stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"];
    NSString* predicateString = [NSString stringWithFormat:@"title CONTAINS[c] '%@'", keywordWithBackslashedApostrophes];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateString];
    self.filteredArray = [self.initialArray filteredArrayUsingPredicate:predicate];
} 

コードとの主な違いは、キーワード内のアポストロフィがバックスラッシュとアポストロフィに置き換えられていることです。

于 2012-11-08T13:51:21.280 に答える
0

この答えpredicateWithFormatを見てみてくださいあなたは引用符なしでの ようにすべてを行うことができます

[NSPredicate predicateWithFormat:@"title CONTAINS[c] '%@'", keyword]
于 2012-11-05T11:10:19.933 に答える
0

問題は、それを行う必要がないときに NSString を作成することです。ここで、NSString 変数は必要ないことに注意してください%@

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(title CONTAINS[c] %@)", keyword];
于 2014-11-26T00:21:49.310 に答える