Salut le problème va comme ceci:Comment créer le bon NSPredicate pour ce genre de requête?
J'ai dans les entités de CoreData qui ont un titre et une relation aux entités de mots-clés.
J'ai besoin d'un prédicat qui m'aide à récupérer toutes les entités dont le titre contient les mots-clés que je tape. J'ai le code ci-dessous qui doit le faire, mais il ne fonctionne pas:
NSArray *keywords = [searchString componentsSeparatedByString:@" "];
NSString *predicateString = @"";
for(NSInteger i = 0; i < [keywords count]; i++) {
if(((NSString*)[keywords objectAtIndex:i]).length != 0) {
if(i==0) {
predicateString = [keywords objectAtIndex:i];
}
else {
predicateString = [predicateString stringByAppendingFormat:@" and keywords.normalizedKeyword contains[cd] %@", [keywords objectAtIndex:i]];
}
}
}
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keywords.normalizedKeyword contains[cd] %@",predicateString];
Par exemple, j'ai des entités avec des titres comme celui-ci:
1) Thème « grand thème de coloriage » 2) » pour enfants » 3) "Voitures pour les enfants"
mes mots-clés db contiendront:
grande colorationthème pour enfants voitures
Comment puis-je créer un prédicat quand je tape par exemple:
Thème
le résultat sera 2) et 3)
ou si je tape:
grand thème
le résultat sera 1) et 2)
Toute aide à obtenir le prédicat droit d'y parvenir est très apprécié. Ce que j'ai essayé de faire là ça ne marche pas et je n'ai plus d'idées.
Merci!
Le moulage n'est * PAS * nécessaire. '-objectAtIndex:' retourne un 'id'. 'id' est tout et n'importe quoi donc la distribution est inutile et une habitude terrible d'entrer en Objective-C. –
Votre boucle 'for' n'est pas non plus nécessaire. Objective-C a une énumération rapide de sorte que vous pouvez le réécrire comme 'pour (NSString * predicateString dans les mots-clés) {' et être fait avec beaucoup de cette logique. –