2017-07-13 2 views
0

Je suis relativement nouveau dans les données de base. J'ai une base de données qui contient des articles avec différentes catégories. Je veux récupérer des données de plusieurs catégories, qui peuvent être sélectionnées par l'utilisateur à la volée. Maintenant, j'ai NSArray qui contient plusieurs catégories sélectionnées (compter de 1 à n) Je veux ajouter un prédicat pour les catégories sélectionnées, mais je ne suis pas capable de le faire. selon mes connaissances j'ai ajouté pour la boucle pour ajouter des catégories dans le prédicat, mais cela ne fonctionne pas.Comment utiliser plusieurs NSPredicate dynamiques de NSArray dans des données de base

for i in 0...(catArray?.count)!-1 { 
    let str = String(format:"catId = %@",(catArray?.object(at: i) as? NSNumber)!) 
    predicateString = predicateString+str 
} 
let dP = NSPredicate(format:"%@",predicateString) 
fetchedRequest.predicate=dP; 

mais l'application se bloque lors de la récupération de la requête. Existe-t-il un autre moyen de le faire? S'il vous plaît aidez-moi avec ceci.

Toute aide est très appréciée.

+0

Utilisez NSCompoundPredicate. Exemple e.g. ici: https://stackoverflow.com/questions/34202239/nspredicate-with-multiple-arguments-and-and-behaviour. –

+0

Copie possible de [NSPredicate avec plusieurs arguments et "comportement AND"] (https://stackoverflow.com/questions/34202239/nspredicate-with-multiple-arguments-and-andhaviour) –

+0

Mais voulez-vous sélectionner des objets? qui ont n'importe quelle catégorie du tableau sélectionné alors c'est juste 'NSPredicate (format:" catId IN% @ ", catArray)' –

Répondre

1

Pour sélectionner des objets qui ont une catégorie du tableau donné simple prédicat suffit:

NSPredicate(format: "catId IN %@", catArray) 

Remarque: Ne jamais utiliser String(format:) pour construire prédicats dynamiquement, parce que presque sûrement la citation et se référeraient se tromper. Utilisez uniquement NSPredicate(format:) et, si nécessaire, NSCompoundPredicate.