NSTextView nach und nach bestücken

martinibook

martinibook

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2005
Beiträge
8.730
Reaktionspunkte
350
Hallo,
Ich baue gerade an einem Cocoa Programm, mit dem man Primzahlen bestimmen kann. Ich habe schon folgendes:
primzahl.png


Ich bekomme pro Klick auf den Butten eine neue Zahl:
Code:
- (IBAction)next:(id)sender
	{
	int primzahl;
	primzahl = neuezahl();
	[textfeld setIntValue:primzahl];
	}
Nun möchte ich gerne in das Textfeld die neue Zahl dazuschreiben, dass dann dort steht: 1,2,3,5,7,11,13 usw. wie mache ich das?

Martin
 
in dem du da mit einem String arbeitest und die neue primzahl immer dran hängst?
 
Ich habe folgenden Code:
Code:
int primzahl;
	
	static NSString *string;
int primzahl;
	
// Neue Primzahl holen
	primzahl = neuezahl();
// In das kleine Feld schreiben
	[textfeld setIntValue:primzahl];
	
// Neue Zahl an alten String anhängen	
	string = sprintf ("%s, %d", *string, primzahl);
	
// Sting ins Textfeld	
	[feld setString:string];
Und dann kommt es zu folgender Meldung, mit der ich allerdings wenig anfangen kann:
xcodefehler.png


Was muss ich da hinschreiben?

Danke für die Hilfe, Martin
 
Sieh dir einfach mal an, wie man sprintf (man sprintf) benutzt :) ... das ist so ein wenig falsch. Leider kenne ich mich nicht mit Cocoa aus, aber sicherlich wird's da eine elegantere Methode geben, als per C-Funktion.
 
Schau dir mal die Klassen NSString und NSMutableString an.

int meineZahl = 1;
NSMutableString *string = [[NSMutableString alloc] init];
NSString *neuerString = [NSString stringWithFormat:mad:"%d", meineZahl];
[string appendString: neuerString];
 
Vielen Dank für den Code. Allerdings habe ich noch ein kleines Problem mit der Funktion stringWithFormat. Ich muss ja den Alten string noch dareintun. Ich habe dass jetzt so versucht. Oder macht das zusammenbauen schon appendString?
Code:
static NSMutableString *string;
	string = [[NSMutableString alloc] init];
	NSString *neuerString = [NSString stringWithFormat:@"%s, %d", string, primzahl];
	[string appendString: neuerString];
	
	// Sting ins Textfeld	
	[feld setString:string];
Dann kommt da zB: †s¶t, 17

Nochmals Danke, Martin
 
Wenn string ein NSString ist, musst du
"mein string ist: %@", string
verwenden statt
"mein string ist: %s", string
 
Ach ja: Das Zusammenbauen macht schon appendString. Append = anhängen.
Also wenn im string "123" drin steht und man macht [string appendString: [NSString stringWithFormat:mad:", 456"]] steht dann im string "123, 456".
 
Ich habe jetzt folgende funktion:
Code:
int primzahl;
	
	// Neue Primzahl holen
	primzahl = neuezahl();
	// In das kleine Feld schreiben
	[textfeld setIntValue:primzahl];
	
	// Neue Zahl an alten String anhängen	
	static NSMutableString *string;
	string = [[NSMutableString alloc] init];
	NSString *neuerString = [NSString stringWithFormat:@"%@, %d", string, primzahl];
	[string appendString: neuerString];
	
	// Sting ins Textfeld	
	[feld setString:string];
Als Ausgabe bekomme ich nach einigen Aufrufen folgendes:
primzahlen2.png


Eigentlich müsste der ja doppelt drangehängt werden, oder sehe ich das falsch?
Klappt das mit dem Static vielleicht nicht?

Martin
 
nein, du machst den string immer neu und schreibst dann was rein, statt den string global zu definieren, dann den text zu holen und dann dran zu hängen...

besorg dir doch mal ein buch über grundlagen des programmierens ;)
 
Vielen Dank für eure Geduld.

Ich habe jetzt folgendes:
Code:
int primzahl;
	
	// Neue Primzahl holen
	primzahl = neuezahl();
	// In das kleine Feld schreiben
	[textfeld setIntValue:primzahl];
	
	// Neue Zahl an alten String anhängen	
	NSMutableString *string;
	string = [[NSMutableString alloc] init];
	string = [feld string];
	NSString *neuerString = [NSString stringWithFormat:@"%@, %d", string, primzahl];
	//[string appendString: neuerString];
	
	// Sting ins Textfeld	
	[feld setString:neuerString];

Das klappt jetzt. Ich hole also jedesmal den alten Inhalt, wie oneOeight gesagt hat.

Martin
 
Besser:
NSString neuerString = [NSString stringWithFormat:mad:"%@, %d", [feld string], primzahlAlsInt];
[feld setString: neuerString];
 
Danke, so spart man wieder eine Variable. Ich werde noch was an der Ausgabe feilen, dass die nicht direkt mit Komma anfängt usw.

Martin
 
Zurück
Oben Unten