hachinoBlog

hachinobuのエンジニアライフ

CoreDataのlike句のワイルドカードを検索する方法

CoreDataでlikeを使用して文字列を検索する際にワイルドカードとなるアスタリスク*と?自身が含まれるものを検索したい場合はバックスラッシュでエスケープする必要がある。

//検索対象文字
NSString *keyword = @"*";

検索対象文字をエスケープしてあげる
keyword = [keyword stringByReplacingOccurrencesOfString:@"*" withString:@"\\*"];
keyword = [keyword stringByReplacingOccurrencesOfString:@"?" withString:@"\\?"];
keyword = [NSString stringWithFormat:@"*%@*", keyword];

//NSPredicateを作成
[NSPredicate predicateWithFormat:@"targetColumn like[cd] %@", target];

//NSPredicateの出力結果
targetColumn LIKE[cd] "*\\**"

検索対象文字部分がシングルクォートでなくダブルクォートになっているので展開されるっぽい?
とりあえずlikeを使用してワイルドカード文字を検索することができた。