2010-04-15 4 views
3

J'essaie de définir une requête d'extraction avec un prédicat pour obtenir des enregistrements dans le magasin dont l'attribut identifiants correspond à un tableau d'identificateurs spécifié dans le prédicat, par ex. La variable employeeIDsArray contient un certain nombre d'objets NSNumber qui correspondent à des ID dans le magasin. Cependant, j'obtiens une erreur "Impossible d'analyser la chaîne de format". Ce type de prédicat fonctionne s'il est utilisé pour filtrer un tableau, mais comme cela a été mentionné, il échoue pour une extraction de données de base. Comment dois-je définir le prédicat s'il vous plaît?Requête de récupération des données de base avec le tableau

Répondre

10

NSPredicate ne pas utiliser des formats comme NSString fait. De sorte que le résultat d'une création de prédicat utilisant le prédicatString pré-généré ne sera pas un prédicat valide.

Tu dois faire un prédicat réel:

NSPredicate * predicate = [NSPredicate predicateWithFormat:@"identifier IN %@", employeeIDsArray]; 
[fetchRequest setPredicate:predicate]; 

Voir the documentation pour plus d'informations sur les formats prédicats.

+0

Merci, mais bien sûr j'appelle: NSPredicate * predicate = [NSPredicate predicateWithFormat: predicateString]; – RunLoop

+0

Toutes mes excuses pour ne pas avoir accepté votre réponse plus tôt. J'ai essayé votre suggestion et cela fonctionne. – RunLoop

4

Lorsque vous créez cette chaîne en utilisant stringWithFormat:, cette méthode insère description du tableau (une chaîne décrivant le contenu du tableau) où vous aviez %@.

Ce n'est pas ce que vous voulez. Vous ne voulez pas tester l'appartenance à une chaîne décrivant le tableau; vous voulez tester l'appartenance au le tableau. Donc, ne passez pas par stringWithFormat: - passez la chaîne de format et le tableau directement à predicateWithFormat:.

+0

Merci. J'ai dû donner "Répondu" à la première affiche, mais +1 parce que grâce à vous je comprends maintenant pourquoi. – RunLoop

+0

+1 pour avoir remarqué pourquoi cela ne fonctionnait pas! Je pensais juste qu'il avait oublié de transformer sa chaîne en un prédicat. –

Questions connexes