ios - Coredata predicate IN operator with like or contain -
i have 2 arrays on have wildcard search , using in operator in operator gives me exact matching want fetch results contains searchterm. possible through in operator or have manually loop through records , match pick record want.
current code :
nsarray *filteredarray = [brandsfabric filteredarrayusingpredicate:[nspredicate predicatewithformat:@"self.color_name in %@ or self.subcategory_name in %@",colornamesarray,patternnamesarray]];
desired functionality this:
nsarray *filteredarray = [brandsfabric filteredarrayusingpredicate:[nspredicate predicatewithformat:@"self.color_name in like/contains %@ or self.subcategory_name in like/contains %@",colornamesarray,patternnamesarray]];
this expensive operation, can try:
nsmutablearray *predicates = [nsmutablearray array]; (nsstring *name in colornames) { [predicates addobject:[nspredicate predicatewithformat: @"color_name contains[cd] %@", name]]; } (nsstring *name in subcategorynames) { [predicates addobject:[nspredicate predicatewithformat: @"subcategory_name contains[cd] %@", name]]; } nspredicate *final = [nscompoundpredicate orpredicatewithsubpredicates:predicates];
maybe subquery in order here. (experimental)
[nspredicate predicatewithformat: @"((subquery(%@, $x, color_name contains[cd] $x).@count != 0) or " @"((subquery(%@, $x, category_name contains[cd] $x).@count != 0)", colornames, categorynames];
Comments
Post a Comment