Pregunta

Estoy intentando utilizar un interior NSProgressIndicator (indeterminado) de una barra de estado-menú. Estoy usando un NSView-objeto como vista para el elemento de menú, y luego subvistas el indicador de progreso para mostrarlo. Sin embargo, siempre que intente llamar a la startAnimation: para el progreso, no pasa nada. Cuando intento hacer lo mismo en una normal de NSWindow funciona perfectamente, pero no cuando el interior de un elemento de menú.

soy nuevo en tanto cacao y Objective-C por lo que pude haber pasado por alto algo "obvio" pero he buscado un poco para una solución, pero sin éxito. He encontrado algo acerca de los elementos del menú no puede ser actualizado, mientras que se muestra y que es necesario utilizar una ventana bordeless lugar. Pero no he podido confirmar esto en cualquier documentación.

Editar:

Ok, casi funciona ahora. Cuando se utiliza el setUsesThreadedAnimation: y desde menuWillOpen de un MenuDelegate y la creación de un nuevo hilo. Este hilo se ejecuta un método local:

-(void) doWork(NSProgressIndicator*) p{
     [p startAnimation:self];
}

Esto iniciará el ProgressIndicator de forma aleatoria (?) Al abrir el menú. Si llamo startAnimation: directamente sin pasar por doWork: (aún utilizando un nuevo hilo), nunca funciona. No setUsesThreadedAnimation: hacer que la barra de progreso crear su propio hilo para la animación?

¿Fue útil?

Solución

solucionado mediante el uso de:

[progressIndicator performSelector:@selector(startAnimation:)
                            withObject:self
                            afterDelay:0.0
                               inModes:[NSArray 
                       arrayWithObject:NSEventTrackingRunLoopMode]];

Dentro de la menuWillOpen :, el problema parece haber sido llamar startAnimation:. Antes de la progressbar se terminó el dibujo en sí

Otros consejos

¿Cómo se hace referencia a la NSProgressIndicator que se encuentra en la vista (y el que está en la ventana, para el caso)? Por ejemplo, ¿tiene una clase controlador que tiene hasta enganchado de IBOutlet a los indicadores de progreso? Si está utilizando un IBOutlet, ¿está usted seguro de que es enganchado correctamente en el archivo de la semilla?

Además, dónde y cuando se le llama startAnimation:? (Tenemos que ver algo de código).

Una cosa que a veces puede ocurrir es que se olvida de conectar un IBOutlet en la punta. Entonces, cuando se intenta indicar al objeto de hacer algo en el código en tiempo de ejecución, el IBOutlet es nil, y así lo creo que es un mensaje que se envía a su objeto es, de hecho, un mensaje que se envía a nil. En otras palabras, es simplemente ignorado, y se ve efectivamente como que no está funcionando.

Siempre que tienen un (potencialmente) de referencia válido para el objeto de interfaz de usuario, el otro problema común que verá es cuando un desarrollador está tratando de enviar un mensaje al objeto en "demasiado pronto" de una vez. En general, los métodos init son demasiado temprano en la vida del objeto de controlador para ser capaz de enviar mensajes a los objetos de interfaz de usuario-aquellos de IBOutlet son todavía nil. Por el -awakeFromNib tiempo se llama, de IBOutlet deben ser válidos (siempre que los conectó en IB) y luego se puede enviar el mensaje al objeto de interfaz de usuario.

¿Le ha dicho a utilizar la animación roscado a través -setUsesThreadedAnimation:?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top