Domanda

Non sono sicuro perché questo codice non funzionerà. Quando si fa clic su un pulsante (azione: ButtonClick) dovrebbe cambiare le due caselle di testo (MyTextLabel e MyTextLabel2) testo valore di incremento 'r' per uno. Ecco il codice:

MainView.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

@interface MainView : UIView {
    IBOutlet UIButton *MyButton;
    IBOutlet UILabel *MyTextLabel;
    IBOutlet UILabel *MyTextLabel2;
}

@property (nonatomic, retain) UIButton *MyButton;
@property (nonatomic, retain) UILabel *MyTextLabel;
@property (nonatomic, retain) UILabel *MyTextLabel2;


- (IBAction)buttonclick;
@end

MainView.m:

#import "MainView.h"
#include <stdlib.h>
#include <libc.h>

@implementation MainView

@synthesize MyButton, MyTextLabel, MyTextLabel2;

int r;

- (IBAction)buttonclick {
    r++
    if(r < 50) {
        MyTextLabel.text = @"< 50";
    }
    else {
        MyTextLabel2.text = @"=> 50";
    }
}
@end
È stato utile?

Soluzione

Ho un sensazione che qualcosa non va con il modo in cui si sta utilizzando int r. Prova a mettere static int r; nella parte superiore della linea @interface in MainView.h e anche aggiungere, sotto la linea - (IBAction)buttonclick;:

+(void) initialize;

Quindi rimuovere int r; da MainView.m. Poi, nel MainView.m aggiungere:

+(void) initialize {
   count = 0;
}

Altri suggerimenti

vedo due problemi:

  1. Non è possibile dichiarare int r dove lo avete. Si dovrebbe dichiararla nel blocco variabile del l'interfaccia (dove si dichiara il pulsante ed etichette o fuori di un metodo) o nella definizione del metodo.
  2. La linea con r ++ non è finita con un punto e virgola.

Non si dice nella sua domanda che cosa, esattamente, non funziona il modo in cui ci si aspetta. La mia ipotesi sta per essere che le prese non sono in realtà collegati correttamente. Si potrebbe desiderare di aggiungere una dichiarazione di registro per buttonClick in questo modo:

NSLog(@"button click called! MyTextLabel is %@", MyTextLabel);

Il punto è, in gran parte, per essere sicuri che non è nil.

In Objective-C i nomi delle variabili e le proprietà devono iniziare con una lettera minuscola per conformarsi al (KVC) Protocollo Valore-chiave di codifica (sempre myButton, mai MyButton). La direttiva @synthesize si basa su questo per generare le setter e getter. Così, per myButton @synthesize genererà -(void)setMyButton:(UIButton *)button e -(UIButton *)myButton.

Quindi, fare MyButton ei suoi colleghi minuscolo e vedere se aiuta.

Metodi di azione hanno sempre un argomento mittente, in modo che il metodo di -buttonClick: dovrebbe essere dichiarato in questo modo:

-(IBAction) buttonClick: (id)sender {
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top