iPhone addiert 4 statt 1... und TableView-Fragen

iYassin

Galloway Pepping
Registriert
13.04.09
Beiträge
1.365
Hallo, hab schon wieder ein Problem mit einer iPhone App... ich hab da so eine idee, und dazu ist es nötig, eine Zahl in einem Label immer um 1 zu erhöhen, auf Knopfdruck.
Also, es gibt da ein Label
Code:
IBOutlet UILabel *label1;
und einen Button mit der
Code:
- (IBAction)increase_1;
Das Label habe ich im Interface Builder mit dem Text "1" gefüllt (ohne die Anführungszeichen :D). Hier mal der Code der IBAction:
Code:
- (IBAction)increase_1 {
	NSString *string_1;
	string_1 = label1.text;
	NSLog(string_1);
	NSLog(@"StringValue before calc");
        int *value_1 = [string_1 intValue];
	NSLog(@"%i",value_1);
	NSLog(@"IntValue before calc");
	int *result;
	result = value_1 + 1;
	NSLog(@"%i",result);
	NSLog(@"IntValue after calc");
	string_1 = [NSString stringWithFormat:@"%i",result];
	NSLog(string_1);
	NSLog(@"StringValue after calc");
	label1.text = string_1;
}

Klingt für mich soweit ganz richtig. Aber: Wenn ich den Button einmal drücke, steht danach im Label "5" drin.
Man sieht hier ja auch die NSLog-Befehle, er wandelt den NSString label1.text auch korrekt in den Integerwert von value_1 um, gibt also bei den ersten beiden NSLogs "1" aus. Nach der Rechnung, also ab "IntValue after calc", gibt er dann immer "5" aus, konvertiert das auch richtig in den NSString und schreibt es ins Label. Nur soll da dann 2 stehen, nicht 5 ;)
Was mache ich falsch? Wäre sehr sehr nett, wenn mir das jemand zeigen könnte, mein Cocoa-Buch ist noch nicht da :)

Vielen Dank schonmal, Yassin
 
Zuletzt bearbeitet:

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Hallo,

ich habe keine Ahnung von dem iPhone. Leider konnte ich Deinen Text auch nur schnell überfliegen.
Aber ich halte so eine Vorgehensweise für nicht ganz richtig.
Du verwendest das Textfeld zum Sichern eines Wertes - insofern es nicht durch den Anwender manipuliert werden darf (sonst nehme ich die Aussage zurück).

Warum verwendest Du einen Zeiger für ein Integer?

Die Methode -intValue liefert Dir einen Integer:

Code:
int value_1 = [string_1 intValue];

???

Viele Grüße
 

iYassin

Galloway Pepping
Registriert
13.04.09
Beiträge
1.365
Mach die Zeiger (*) bei deinen Variablen weg, dann sollte es gehen.

Perfekt - aber den beim NSString musste ich dalassen, sonst kamen acht Fehler. Vielen vielen Dank! :)

Noch eine Frage:
Hab das ganze jetzt in eine Navigation-Based Application übernommen. Die startet ja mit einem TableView. Das funktioniert soweit auch ganz gut, auch mit der Navigation in zwei andere Views, aber da ist noch das Problem, dass ich da gerne eine Toolbar unten hätte.
Die in den "Simulated Controls" einschalten, bringt natürlich nichts, wie ich schon festgestellt habe :D Wenn ich die in den RootViewController reinziehe, geht es nicht, die geht gleich wieder zurück in die Lib, wenn ich die ins MainWindows reinziehe, verschwindet der TableView (bzw. der Platzhalter dafür (Loading View from ...)) im Interface Builder und die Bottom-Bar hängt in der Mitte. Gehen tut es ja, Things kanns ja auch :D
Wie kann ich die denn da einfügen?

Und noch eine Frage :)
Ich nutze als TableView-Typ "Grouped" - die TableView füttere ich über ein NSMutableArray mit bisher zwei Items, die jetzt aneinanderhängen. Wie kann ich da denn eine neue Gruppe erstellen, also dass da ein bisschen Platz ist, so wie z.B. bei Things im Startbildschirm, da sind ja verschiedene Gruppen...

Vielen Dank schonmal ;)
 

LittlePixel

Strauwalds neue Goldparmäne
Registriert
09.07.08
Beiträge
641
Wenn Du bei einem Integer unbewusst einen Zeiger setzt und ihn beim String entfernst, dann bist Du für noch gar nichts bereit.
Zeigt auch, dass Du ein Textfeld als "Speicher" verwendest.

Bitte erlerne zunächst die Grundlagen. Damit sparst Du Dir selber viel Arbeit und Fehlersucherei.

Viele Grüße
 

Ares83

Hibernal
Registriert
10.10.07
Beiträge
2.011
du musst da [YYY setToolBarHidden:NO] beim aufrufen des Views machen. Wobei YYY wenn ich es von meiner App noch richtig weiß der Name des UINavigationController ist.