@synthesize não está a trabalhar e operações básicas não estão a funcionar em Objective-C
-
12-09-2019 - |
Pergunta
Não tenho a certeza por que este código não vai funcionar. Quando eu clicar em um botão (ação: ButtonClick) que deve alterar as duas caixas de texto (MyTextLabel e MyTextLabel2) valor de incremento texto 'r' por um. Aqui está o código:
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
Solução
Eu tenho errado um sentimento de algo com a maneira que você está usando int r
. Tente colocar static int r;
no topo da linha @interface
em MainView.h e também adicionar, sob a linha - (IBAction)buttonclick;
:
+(void) initialize;
Em seguida, retire int r;
de MainView.m. Então, em MainView.m add:
+(void) initialize {
count = 0;
}
Outras dicas
Eu vejo dois problemas:
- Você não pode declarar
int r
onde você tê-lo. Você deve declará-la no bloco variável de sua interface (onde você declarar o seu botão e etiquetas ou fora de um método) ou na definição do método. - A linha com r ++ não é terminada com um ponto e vírgula.
Você não diz na sua pergunta o que, exatamente, não está funcionando da maneira que você espera. Meu palpite é que vai ser a de que as tomadas não estão realmente conectado corretamente. Você pode querer adicionar uma declaração de registro para buttonClick
assim:
NSLog(@"button click called! MyTextLabel is %@", MyTextLabel);
O ponto é, principalmente, para ter certeza que não é nil
.
Em Objective-C, os nomes de variáveis ??e propriedades devem começar com uma letra minúscula em conformidade com o valor-chave de codificação protocolo (KVC) (sempre myButton, não MyButton). A directiva @synthesize
conta com isso para gerar os setters e getters. Assim, por myButton
@synthesize
irá gerar -(void)setMyButton:(UIButton *)button
e -(UIButton *)myButton
.
Assim, fazem MyButton
e seus colegas minúsculas e ver se isso ajuda.
Os métodos de ação sempre tem um argumento remetente, para que o seu método -buttonClick:
deve ser declarada como este:
-(IBAction) buttonClick: (id)sender {
}