почему он не распознает @properties из файла заголовка из основного файла?
-
12-09-2019 - |
Вопрос
UIView.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface UIView : UIResponder {
IBOutlet UILabel *endLabel;
IBOutlet UIButton *goButton;
IBOutlet UITextField *textBox1;
IBOutlet UITextField *textBox2;
@property(nonatomic, retain) UILabel *endLabel;
@property(nonatomic, retain) UIButton *goButton;
@property(nonatomic, retain) UITextField *textBox1;
@property(nonatomic, retain) UITextField *textBox2;
}
- (IBAction)goButtonClicked;
@end
UIView.m
#import "UIView.h"
@implementation UIView
@synthesize textBox1, goButton;
@synthesize textBox2, goButton;
@synthesize textBox1, endLabel;
@synthesize textBox2, endLabel;
@synthesize goButton, endLabel;
- (IBAction)goButtonClicked {
}
@end
Решение
Схожу немного с ума от @synthesize
эс, не так ли?Я действительно считаю, что ваша главная проблема здесь заключается в том, что @property
декларации должны быть после заключительный этап @interface
.
Я удивлен, что компилятор не поднял красный флаг размером с Гренландию, хотя.
Кроме того, вы, вероятно, имели в виду создать пользовательский подкласс UIView
;Я буду использовать MyView
.
//MyView.m -- correct synthesize declaration
@synthesize textBox1, goButton, textBox2, endLabel;
//MyView.h -- correct interface declaration
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface MyView : UIView {
IBOutlet UILabel *endLabel;
IBOutlet UITextField *textBox1;
IBOutlet UITextField *textBox2;
IBOutlet UIButton *goButton;
}
@property(nonatomic, retain) UIButton *goButton;
@property(nonatomic, retain) UILabel *endLabel;
@property(nonatomic, retain) UITextField *textBox1;
@property(nonatomic, retain) UITextField *textBox2;
@end
Другие советы
Первая проблема заключается в том, что вы называете свой класс UIView, который уже существует в UIKit.Видишь @William's совет по решению этой проблемы.
Вам нужен только один @synthesize
для каждого свойства, и когда имя свойства совпадает с именем переменной экземпляра, вам нужно будет только сделать что-то подобное в вашем файле .m:
@synthesize endLabel;
@synthesize goButton;
@synthesize textBox1;
@synthesize textBox2;
Кроме того, вы, скорее всего, столкнетесь с проблемами при получении вашего IBAction
метод работы.Чтобы использовать метод для привязки целевого действия, он должен иметь возвращаемый тип IBAction
(который вы исправили) и принимаете id
параметр, представляющий отправителя.Сигнатура канонического метода выглядит следующим образом:
- (IBAction) goButtonClicked:(id)sender;
Я бы на самом деле рекомендовал использовать имя метода, которое явно не привязано к кнопке, которая его вызывает, тем более что могут быть другие способы вызвать то же действие.(Например, если вы писали настольное приложение, эквивалент клавиши или команда меню могли бы сделать то же самое.)