@synthesize не работает, и основные операции не работают в Objective-C.
-
12-09-2019 - |
Вопрос
Я не уверен, почему этот код не будет работать.Когда я нажимаю кнопку (действие:buttonclick), он должен изменить значение увеличения текста «r» в двух текстовых полях (MyTextLabel и MyTextLabel2) на единицу.Вот код:
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
Решение
У меня такое ощущение, что что-то не так с тем, как ты используешь int r
.Попробуйте поставить static int r;
наверху @interface
строку в MainView.h, а также добавьте под - (IBAction)buttonclick;
линия:
+(void) initialize;
Затем удалите int r;
с сайта MainView.m.Затем в MainView.m добавьте:
+(void) initialize {
count = 0;
}
Другие советы
Я вижу две проблемы:
- Вы не можете заявить
int r
где оно у тебя есть.Вы должны объявить его в блоке переменных вашего интерфейса (где вы объявляете кнопку и метки или вне метода) или в определении метода. - Строка с r++ не заканчивается точкой с запятой.
В своем вопросе вы не говорите, что именно не работает так, как вы этого ожидаете.Я предполагаю, что ваши розетки на самом деле подключены неправильно.Возможно, вы захотите добавить оператор журнала в buttonClick
так:
NSLog(@"button click called! MyTextLabel is %@", MyTextLabel);
Главное, чтобы убедиться, что это не так. nil
.
В Objective-C имена переменных и свойств должны начинаться со строчной буквы, чтобы соответствовать протоколу кодирования ключ-значение (KVC) (всегда myButton, никогда MyButton).В @synthesize
Директива полагается на это для создания сеттеров и геттеров.Таким образом, для myButton
@synthesize
будет генерировать -(void)setMyButton:(UIButton *)button
и -(UIButton *)myButton
.
Итак, сделайте MyButton
и его коллеги строчными буквами и посмотрим, поможет ли это.
Методы действий всегда имеют аргумент отправителя, поэтому ваш -buttonClick:
метод должен быть объявлен следующим образом:
-(IBAction) buttonClick: (id)sender {
}