2010-05-11 13 views
1

J'ai un tableau d'objets NSDictionary. Ces dictionnaires sont analysés à partir d'un fichier JSON. Tous les objets de valeur dans le NSDictionary sont de type NSString, une clé est appelée "distanceInMeters".Envoyer une valeur NSDictionary lors de l'application d'un NSPredicate?

je l'avais prévu sur le filtrage de ces tableaux à l'aide d'un NSPredicate, alors j'ai commencé comme ça:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(distanceInMeters <= %f)", newValue]; 
NSArray *newArray = [oldArray filteredArrayUsingPredicate:predicate]; 

Je crois que cela aurait fonctionné si la valeur de la clé « distanceInMeters » était un NSNumber, mais parce que Je l'ai à partir d'un fichier JSON tout est NSStrings. Ce qui précède donne cette erreur: ****** - [NSCFNumber length]: sélecteur non reconnu envoyé à l'instance 0x3936f00 ***

Ce qui est logique car je venais d'essayer de traiter un NSString comme NSNumber.

Existe-t-il un moyen de diffuser les valeurs du dictionnaire pendant qu'elles sont filtrées, ou peut-être une façon complètement différente de contourner cela?

quelqu'un L'espoir peut me aider :)

Répondre

7

Essayez ceci:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(distanceInMeters.floatValue <= %f)", newValue]; 
+0

Salut Homer Merci d'avoir fait l'affaire :) Je ne savais pas que vous pouviez taper cast comme ça, NSPredicates sur toute autre chose que NSManagedObjects est nouveau pour moi :) Merci encore – RickiG

+1

FYI, ce n'est pas de type casting; il appelle simplement la méthode "floatValue" sur NSString. –

+0

Ahh Merci je comprends, il est bien sûr accéder à la propriété directement à la place de l'accesseur [NSString floatValue] :) – RickiG

0

Votre problème n'est pas le prédicat; votre problème est que vous avez affaire à des objets NSString au lieu de traiter des objets NSNumber. Je concentrerais mon temps sur les changer en NSNumbers d'abord, et ensuite vérifier que cela ne fonctionne pas.

Pour votre information, le JSON Framework-t parsing nombres dans NSNumbers ...

+0

Salut Dave, merci, oui je préférerais aussi traiter les bons types :) J'ai regardé la bibliothèque JSON que j'utilise, elle scanne les nombres. Puis j'ai essayé ceci: \t BOOL theBool = [[dict objetForKey: @ "distanceInMeters"] isKindOfClass: [classe NSString]]; \t NSLog (@ "La valeur du booléen est% @ \ n", (theBool? @ "YES": @ "NO")); Il revient OUI, donc pas de doute. J'utilise SBJSON pourrait-il être que cela ne fonctionne tout simplement pas? – RickiG