Cuando muestro un NSAlert como este, tengo la respuesta de inmediato:Espere a que [NSAlert beginSheetModalForWindow: ...];
int response;
NSAlert *alert = [NSAlert alertWithMessageText:... ...];
response = [alert runModal];
El problema es que esta aplicación es modal y mi solicitud está basada documento. Puedo mostrar la alerta en la ventana del documento actual mediante el uso de hojas, así:
int response;
NSAlert *alert = [NSAlert alertWithMessageText:... ...];
[alert beginSheetModalForWindow:aWindow
modalDelegate:self
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
contextInfo:&response];
//elsewhere
- (void) alertDidEnd:(NSAlert *) alert returnCode:(int) returnCode contextInfo:(int *) contextInfo
{
*contextInfo = returnCode;
}
El único problema con esto es que beginSheetModalForWindow:
vuelve enseguida, así que no se puede pedir de manera fiable al usuario una pregunta y esperar una respuesta. Esto no sería un gran problema si pudiera dividir la tarea en dos áreas, pero no puedo.
Tengo un ciclo que procesa aproximadamente 40 objetos diferentes (que están en un árbol). Si un objeto falla, quiero que se muestre la alerta y preguntar al usuario si continuar o cancelar (continuar procesando en la rama actual), pero dado que mi aplicación está basada en documentos, las pautas de interfaz humana de Apple determinan el uso de hojas cuando la alerta es específico de un documento.
¿Cómo puedo mostrar la hoja de alerta y esperar una respuesta?
Threads, en última instancia, ser el camino a seguir, supongo. El árbol de objetos eventualmente se hará más grande y más complicado. – dreamlax
Sin ver su aplicación, es obviamente difícil de decir, pero ¿está seguro de que necesita hilos?Nunca me he encontrado con el caso en que poner la respuesta en el método de devolución de llamada era más complejo que enhebrar la aplicación. –