Проблемы с NSProgressIndicator - возможно, мой подкласс NSView?

Я создал базовое приложение, создал подкласс NSView и добавил его в качестве настраиваемого представления в построителе интерфейса. Все работает нормально.

Однако некоторые вещи работают неправильно, что заставляет меня задаться вопросом, правильно ли мой NSView разделен на подклассы? В частности, при использовании NSProgressIndicator я могу использовать startAnimating: и stopAnimating для неопределенного, но если я попытаюсь сделать что-нибудь с определенным с помощью incrementBy, он ничего не сделает.

Даже если я установил для детерминированного NSProgressIndicator значение по умолчанию 50.0, оно появляется, когда приложение запускается с 0.0, несмотря на то, что он хорошо выглядит в IB.

Мой NSProgressIndicator правильно подключен как IBOutlet, я могу сказать ему, чтобы он прятался и т. Д., Просто не могу заставить его анимировать вообще. Однако у меня есть и другие проблемы, которые заставляют меня думать, что эта проблема на самом деле является моим подклассом NSView (например, Quick Look не срабатывает).

В моем подклассе я просто переопределил методы initWithFrame: и drawRect, вызвав их [super]. Как я уже сказал, я затем поместил это как настраиваемое представление в построитель интерфейса и изменил его на MyCustomView. В основном все работает нормально ...?

Я создаю подклассы неправильно или неправильно что-то делаю в построителе интерфейса? Кажется, мне не хватает какой-то мелочи ?!


person mootymoots    schedule 12.01.2011    source источник


Ответы (2)


Решил это.

Изначально в моем методе awakeFromNib я делал следующее:

- (void)awakeFromNib{
    [super awakeFromNib];
}

Оказывается, awakeFromNib не должен вызывать super, если он находится непосредственно под NSView. Удаление super устранило проблему.

- (void)awakeFromNib{
}
person mootymoots    schedule 12.01.2011

Вам нужно переопределить initWithFrame :, а не init. Вероятно, в этом проблема.

Еще одна вещь, о которой следует быть осторожным с индикаторами выполнения: если вы выполняете много работы, вы можете отложить ее до следующей итерации цикла выполнения, чтобы индикатор выполнения обновился. Используйте отложенные выполнения (performSelector: withObject: afterDelay :) или что-то подобное, чтобы пользовательский интерфейс обновлялся.

person Drew McCormack    schedule 12.01.2011
comment
Спасибо, извините, я выполняю initWithFrame ... Может быть, я загружаюсь через .xib и мне нужно переопределить awakeFromNib? - person mootymoots; 12.01.2011