2009-09-14 12 views
29

Ich möchte eine Funktion in Objective-C wie der unten schreiben, die eine variable Anzahl von Argumenten nimmt und diese Argumente weitergibt an +stringWithFormat:. Ich weiß über vsnprintf, aber das würde bedeuten, das NSString-Format in C und zurück zu konvertieren (und würde auch bedeuten, die Formatierungs-Platzhalter darin zu konvertieren ...).Wie man eine variable Anzahl von Argumenten an NSString + stringWithFormat "weitergibt":

Der folgende Code kompiliert, aber natürlich nicht so tun, als ich :) will

NSString *estr(NSString *format, ...) { 
    va_list args; 
    va_start(args, format); 
    NSString *s = [NSString stringWithFormat:format, args]; 
    va_end(args); 
    return s; 
} 

Grundsätzlich: Gibt es eine va_list -friendly Version der +stringWithFormat: Methode oder ist es möglich, einen zu schreiben?

+0

Nur um zu zeigen, dass dieses Beispiel nicht nur ein Spielzeug ist, würde ich gerne zu Verwenden Sie eine solche Methode auch hier: http://cocoaeheads.byu.edu/wiki/different-nslog –

+1

Ja, in der Tat! NSLog ist viel zu gesprächig, macht es manchmal schwer zu lesen. Was ich im Sinn hatte, ist eine sehr einfache Möglichkeit, meine Apps zu internationalisieren ... Ich möchte etwas wie tr schreiben (@ "Datei% @ nicht öffnen", filePath); Zum Beispiel, und dies muss einfach zurückgegeben werden wie es ist (richtig formatiert) in frühen Stadien der Entwicklung, dann später ein Werkzeug haben, das alle tr() Aufrufe findet, erstellt die benötigten Ressourcendateien für Übersetzungen aus den gefundenen Aufrufen, später schalte ich einfach einen Schalter um und die tr() - Aufrufe suchen und übersetzen die Nachrichten, die sie übergeben haben ... –

Antwort

46

initWithFormat:arguments:

NSString *estr(NSString *format, ...) { 
    va_list args; 
    va_start(args, format); 
    NSString *s = [[[NSString alloc] initWithFormat:format arguments:args] autorelease]; 
    va_end(args); 
    return s; 
} 

sie scheinen nicht ein Convenience-Konstruktor „stringWith ...“ zu haben Version

+0

In der Tat! Vielen Dank, ich schaute auf den falschen Platz (plus, ich habe den Anruf zu 'Autorelease' vergessen). Das funktioniert! –

+5

Sie haben Recht, sie haben keine Bequemlichkeitsmethode. Ich habe vor ein paar Monaten einen Radar (# 7025084) angemeldet, der genau dieses Ding anfordert. Wenn Sie diese Funktion haben möchten, melden Sie bitte einen Fehler, der '+ [NSString stringWithFormat: arguments:]' anfordert und auf diese Radarnummer verweist - Duplikate (es gibt bereits eine) sind die besten Entwickler bei "Voting" bei Problemen, die sie für richtig halten wichtig. http://bugreport.apple.com –

+1

Hinweis: Um die Triage zu vereinfachen, verwenden Sie bitte den Komponentennamen "NSString" und die Version "X". Vielen Dank! –

Verwandte Themen