2010-11-05 10 views
4

Le [NSString stringWithFormat:]; peut prendre plusieurs arguments même s'il est déclaré NSString et non NSArray et qu'il ne comporte qu'un seul deux-points.chaîne avec le format en tant qu'argument pour la méthode (objectif-c)

Comment puis-je avoir cela pour ma propre méthode, qui est comme un remplacement de NSLog qui écrit dans un champ de texte, il est souvent utilisé et je ne veux pas continuer à ajouter plus de crochets.

Répondre

2

Utilisez un des points de suspension après le nom de l'argument:

(NSNumber *) addValues:(int) count, ...; 

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocDefiningClasses.html

Vous devez ensuite utiliser va_list et va_start à itérer les arguments fournis:

- (NSNumber *) addValues:(int) count, ... 
{ 
    va_list args; 
    va_start(args, count); 

    NSNumber *value; 

    double retval; 

    for(int i = 0; i < count; i++) 
    { 
    value = va_arg(args, NSNumber *); 

    retval += [value doubleValue]; 

    } 

    va_end(args); 
    return [NSNumber numberWithDouble:retval]; 
} 

Exemple de: http://numbergrinder.com/node/35

Notez qu'il s'agit d'une fonctionnalité C intégrée qui ne fait pas partie d'Objective-C en particulier; il y a une bonne explication de l'utilisation va_arg ici:

http://publications.gbdirect.co.uk/c_book/chapter9/stdarg.html

+0

comment ferais-je faire avec stringWithFormat? dis que je veux une méthode appelée 'titleWithFormat:' –

+0

Votre signature de méthode serait - (NSString *) titleWithFormat: (NSString *) format, ...; – GendoIkari

+0

Et mon deuxième lien fournit des exemples qui utilisent une boucle while au lieu d'une boucle for, que vous pouvez utiliser pour faire une boucle sur chacun des arguments fournis. Si ce que vous voulez est la même chose que stringWithFormat; Vous devriez simplement pouvoir appeler cette méthode et passer les arguments. – GendoIkari