Попробуйте так:
[progressIndicator performSelector:@selector(startAnimation:)
withObject:self
afterDelay:0.0
inModes:[NSArray
arrayWithObject:NSEventTrackingRunLoopMode]];
Внутри menuWillOpen: проблема, похоже, вызывала startAnimation: до того, как индикатор выполнения закончил рисовать себя.
Как вы ссылаетесь на NSProgressIndicator, который находится в представлении (и, если на то пошло, в окне)? Например, есть ли у вас класс контроллера, в котором IBOutlet подключен к индикаторам выполнения? Если вы используете IBOutlet, вы уверены, что он правильно подключен в файле пера?
Кроме того, где и когда вы вызываете startAnimation:? (Нам нужно увидеть код).
Иногда может случиться так, что вы забудете подключить IBOutlet к перу. Затем, когда вы пытаетесь сказать объекту что-то сделать в коде во время выполнения, IBOutlet равен нулю, и поэтому то, что вы считаете сообщением, отправляемым вашему объекту, на самом деле является сообщением, отправляемым nil. Другими словами, это просто игнорируется и фактически выглядит так, как будто оно не работает.
Если у вас есть (потенциально) действительная ссылка на объект пользовательского интерфейса, другая распространенная проблема, с которой вы столкнетесь, — это когда разработчик пытается отправить сообщение объекту «слишком рано». В общем, методы init находятся слишком рано во времени существования объекта контроллера, чтобы иметь возможность отправлять сообщения объектам пользовательского интерфейса — эти IBOutlet по-прежнему равны нулю. К моменту вызова -awakeFromNib IBOutlet должны быть действительны (при условии, что вы подключили их в IB), и вы можете отправить сообщение объекту пользовательского интерфейса.
person
Anoop Vaidya
schedule
10.11.2012