为什么不从主文件中识别头文件中的@properties?

时间:2009-07-12 19:19:13

标签: objective-c xcode properties syntax-error

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 个答案:

答案 0 :(得分:4)

@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

答案 1 :(得分:0)

第一个问题是你正在命名你的类UIView,它已经存在于UIKit中。请参阅 @ Williham的有关解决此问题的建议。

每个属性只需要一个@synthesize,当属性名称与实例变量名称匹配时,您只需在.m文件中执行以下操作:

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

此外,您可能会遇到使IBAction方法生效的问题。要将方法用于目标 - 操作链接,它必须具有IBAction的返回类型(您有正确的)并接受表示发件人的id参数。规范方法签名如下所示:

- (IBAction) goButtonClicked:(id)sender;

我实际上推荐的方法名称没有明确地绑定到调用它的按钮,特别是因为可能有其他方法来调用相同的操作。 (例如,如果您正在编写桌面应用程序,则等效键或菜单命令可以执行相同的操作。)