web-dev-qa-db-ja.com

NSPredicate-フォーマット文字列を解析できません

この文字列「193e00a75148b4006a451452c618ccec」でmy_column値を持つ行をフェッチするNSPredicateを書き込もうとすると、以下のクラッシュが発生します。

キャッチされない例外「NSInvalidArgumentException」が原因でアプリを終了します、理由:「フォーマット文字列「my_column = 193e00a75148b4006a451452c618ccec」を解析できません」

私の述語

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@==\"%@\"",attributeName,itemValue]];

これも試しました

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ == %@",attributeName,itemValue]];

この

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ = %@",attributeName,itemValue]];

この

fetchRequest.predicate=[NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@=\"%@\"",attributeName,itemValue]];

助けてください。

私はマーティンRの答えを試していたときにこれを見つけました

fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%@==%@",attributeName,itemValue];

渡したattributeNameには ''が付いているので、attributeNameを外してハードコードすると、うまく機能します。

21
Satheeshwaran

文字列を一重引用符で囲みます。

[NSPredicate predicateWithFormat:@"my_column = '193e00a75148b4006a451452c618ccec'"]

またはbetter、引数の置換を使用:

[NSPredicate predicateWithFormat:@"my_column = %@", @"193e00a75148b4006a451452c618ccec"]

2番目の方法は、検索文字列に'"などの特殊文字が含まれている場合の問題を回避します。

注釈:述語を構築するときにstringWithFormatを使用しないでください。 stringWithFormatpredicateWithFormat%K%@のフォーマットを異なる方法で処理するため、これらの2つの方法を組み合わせるとエラーが発生しやすくなります(不要です)。

45
Martin R

等しいかどうかを確認するときに、あなたが見逃したと思います

今試してください、

[NSPredicate predicateWithFormat:@"my_column='193e00a75148b4006a451452c618ccec'"];

試す

//Case Insensitive
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%K = [cd] %@",attributeName,itemValue];

//Case sensitive
fetchRequest.predicate=[NSPredicate predicateWithFormat:@"%K = %@",attributeName,itemValue];
3
Anupdas