#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 символа подчеркивания.