почему он не распознает @properties из заголовочного файла из основного файла? - PullRequest
1 голос
/ 12 июля 2009

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

Ответы [ 2 ]

4 голосов
/ 12 июля 2009

Сходит с ума от @synthesize s, не так ли? Я считаю, что ваша главная проблема в том, что @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
0 голосов
/ 15 июля 2009

Первая проблема заключается в том, что вы называете свой класс UIView, который уже существует в UIKit. См. @ Williham's совет по решению этой проблемы.

Вам нужен только один @synthesize для каждого свойства, и когда имя свойства совпадает с именем переменной экземпляра, вам нужно всего лишь сделать что-то подобное в вашем файле .m:

@synthesize endLabel;
@synthesize goButton;
@synthesize textBox1;
@synthesize textBox2;

Кроме того, вы, вероятно, столкнетесь с проблемами при использовании метода IBAction. Чтобы использовать метод для связи целевого действия, он должен иметь тип возвращаемого значения IBAction (который вы правильно указали) и принять параметр id, представляющий отправителя. Сигнатура канонического метода выглядит следующим образом:

- (IBAction) goButtonClicked:(id)sender;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...