Необъявленный идентификатор, инициализирующий фрейм

#objective-c

#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
  

Ответ №1:

Когда вы объявляете свойство с именем _frame (один символ подчеркивания), Objective-C синтезирует средство получения, средство установки и вызываемую переменную экземпляра __frame (два символа подчеркивания). Измените назначение либо на use self._frame для доступа к свойству через установщик, либо на use __frame для прямого доступа к переменной:

 if (self) {
    __frame = frame;
}
  

Еще лучше переименовать свойство во что-то без подчеркивания, чтобы соответствовать тому, как Apple рекомендует называть свойства.

Ответ №2:

Прежде всего, не объявляйте переменные, которые уже есть в вашем классе. И второе. Почему вы удерживаете фрейм? Ваш BNRHypnosisView подкласс UIView , который уже имеет
@property(nonatomic) CGRect frame;
свойство, и вы можете получить к нему доступ в любое время!

Ответ №3:

Измените свою очистку на..

 @property (nonatomic) CGRect frame;
  

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