почему он не распознает @properties из файла заголовка из основного файла?

StackOverflow https://stackoverflow.com/questions/1116690

Вопрос

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;

Я бы на самом деле рекомендовал использовать имя метода, которое явно не привязано к кнопке, которая его вызывает, тем более что могут быть другие способы вызвать то же действие.(Например, если вы писали настольное приложение, эквивалент клавиши или команда меню могли бы сделать то же самое.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top