У меня есть пользовательское представление (подкласс NSView
), и я хотел бы сохранить некоторые данные, основанные на измерениях (ширина / высота) представления, когда создается представление, то есть до вызова drawRect
.
Я ожидаю, что смогу использовать initWithFrame
и взять границы от переданного NSRect
, но если я проверю данные в отладчике, я просто получу экземпляр NSRect
с (x=0, y=0), (width=0, height=0)
, Предположительно, он еще не инициализирован?
Еще более озадачивает то, что, если я записываю ширину кадра на консоль, я получаю значение дважды:
- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
CGFloat width = frame.size.width;
NSLog(@"width: %f", width);
}
}
Этот код журналов:
21/10/2011 09:40:55.733 Test App: width: 480.000000
21/10/2011 09:40:55.818 Test App: width: 0.000000
Как будто initWithFrame работает в двух отдельных потоках, и у нас есть какое-то состояние гонки. Как правильно получить ширину кадра при инициализации представления?
ОБНОВЛЕНИЕ [решено]: Эта проблема теперь решена. Оказывается, у меня было два экземпляра моего NSView
подкласса в Интерфейсном Разработчике. Один был нарисован как Custom View
, а другой был Object
на боковой панели. Я не осознавал, что добавление объекта на боковую панель вызывало его создание во время выполнения. Удалил объект и мой код теперь работает.