Беды NSProgressIndicator - возможно, мой подкласс NSView? - PullRequest
0 голосов
/ 12 января 2011

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 12 января 2011

Решил.

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

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

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

- (void)awakeFromNib{
}
0 голосов
/ 12 января 2011

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

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

...