2009-08-24 10 views
0

Ich habe eine einfache Routine zu zählen, jedes Mal wenn der Benutzer auf eine Schaltfläche klickt.Iphone SDK - Zählschritte um 4 für jede Taste tippen tippen

Allerdings wird die ganze Zahl (numberOfClicks) jedes Mal um vier erhöht. Könnte das Ereignis mehr als einmal für jeden Benutzer geschehen?

(btw die Aktionsmethode unter dem ‚retuschieren innen‘ Aktion verbunden ist)

- (IBAction)myButtonClicked 
{ 
    numberOfClicks+=1; 
    NSString *clicks = [NSString stringWithFormat:@"number of clicks = %d", numberOfClicks]; 
    myLabel.text = clicks; 
} 

Vielen Dank, Chris

Antwort

1

Wenn Sie in einem Aufruf wie NSLog(clicks) hinzufügen, und Sie laufen Code, erhalten Sie die Log-Nachricht 4 mal?

Sind andere Tasten mit dieser IBAction verbunden?

Haben Sie diese IBAction mit mehr als einer Steckdose Ihrer einzigen Taste verbunden - z. B. Innen auffrischen, Außen auf, Innen aufziehen, Außen aufziehen, usw.?

+0

Hallo, ich habe mit dem IB überprüfen und es ist nur mit dem einen Knopf verbunden. Der NSLog-Trace gibt jedes Mal eine Erhöhung von 4 zurück, also immer noch verwirrt von diesem. – CJR

+0

Von Ihrem Code lebt 'numberOfClicks' außerhalb dieser Funktion, vielleicht als eine Mitgliedsvariable. Ändert irgendein anderer Code 'numberOfClicks'? Wo ist es initialisiert? –

0

NSInteger ist ein Primitiv, kein Objekt! Was Sie wirklich tun, ist das Erhöhen der Adresse, auf die der NSInteger * zeigt. Da NSInteger 4 Bytes lang ist, nimmt der Compiler bei jeder Inkrementierung an, dass, da es ein Zeiger ist, Sie zum nächsten NSInteger im Speicher springen wollen, weshalb Sie ein Vielfaches von 4 erhalten. Entfernen Sie einfach das '*' wenn Sie deklarieren NSInteger und Sie sollten alle eingestellt sein. Also, statt es zu deklarieren wie int *NameOfDeclaration; einfach entfernen Sie die * Es würde so aussehen int NameOfDeclaration;

Verwandte Themen