未声明的标识符初始化帧

时间:2014-06-30 11:04:32

标签: objective-c

我正在尝试初始化一个框架。这是代码。我不明白为什么我从Xcode获得消息Undeclared identifier _frame。它位于.h文件中,我在其实现中使用其名称调用它。我哪里错了?

#import <UIKit/UIKit.h>

@interface BNRHypnosisView : UIView

@property (nonatomic) CGRect _frame;

@end


#import "BNRHypnosisView.h"

@implementation BNRHypnosisView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];

    if (self) {
        _frame = frame;
    }

    return self;
}


@end

3 个答案:

答案 0 :(得分:4)

当您声明一个名为_frame的属性(一个下划线)时,Objective-C会合成一个getter,一个setter和一个名为__frame的实例变量(两个下划线)。将您的作业更改为使用self._frame通过设置器访问该属性,或使用__frame直接访问该变量:

if (self) {
    __frame = frame;
}

更好的是,将属性重命名为没有下划线的内容,以与Apple建议命名属性的方式保持一致。

答案 1 :(得分:2)

首先,不要声明您的类已经存在的变量。 第二件事。为什么你拿着框架?您的BNRHypnosisViewUIView的子类,已经有了 @property(nonatomic) CGRect frame;
物业,你可以随时访问它!

答案 2 :(得分:-1)

将您的declearation更改为..

@property (nonatomic) CGRect frame;

希望它能解决您的问题。之所以发生这种情况是因为前一个创建了一个名为__frame的实例变量,其中包含2个下划线。