2010-10-02 6 views
2

Je fais un cadre et j'ai ce code (conditions est un NSDictionary):stringWithFormat: avec datatype inconnu

for (NSString *key in conditions) { 
    id value = [[conditions valueForKey:key] retain]; 


    // Check if number or string 
    if ([value class] == [NSString class]) { 
     conditionsString = [NSString stringWithFormat:@"%@='%@' ", key, value]; 
    } else { 
     conditionsString = [NSString stringWithFormat:@"%@=%@ ", key, value]; 
    } 
    } 

Si le value est une NSString, citations devraient être ajoutés, sinon les codes ne doivent pas être ajoutés . Cependant, si ce n'est pas un NSString, je ne connais pas le type de données value, car il pourrait être NSNumber, NSInteger, int, float, double, etc ... Je ne peux pas simplement utiliser %@ ou %d mais je suis sûr que quelqu'un sur SO sait comment faire cela? Merci.

+0

vous ne pouvez pas ajouter un 'NSInteger',' int', 'float' ou' double' à un NSDictionary parce qu'ils sont tous struct C. Vous ne pouvez avoir que des objets de type 'NSObject' comme @nesium l'a dit. –

+0

Aha, donc tous les numéros devraient être un NSNumber? –

Répondre

4

jetez un oeil à this.

edit: dans votre cas, c'est plutôt simple, puisque nsdictionary ne peut contenir que des nsobjects. alors% @ ferait l'affaire.

0

Vous pouvez vérifier la classe (kindOfClass), puis utiliser le formateur approprié.

par exemple.

if ([myObj isKindOfClass:[NSString class]])