@synthesize non funziona e le operazioni di base non si lavora in Objective-C
-
12-09-2019 - |
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
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:
- 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. - 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 {
}