Quando ho visualizzare un NSAlert come questo, ottengo la risposta subito:Attendi [NSAlert beginSheetModalForWindow: ...];
int response;
NSAlert *alert = [NSAlert alertWithMessageText:... ...];
response = [alert runModal];
Il problema è che questa è l'applicazione-modale e la mia domanda è documento basato. Visualizzo l'avviso nella finestra del documento corrente utilizzando fogli, in questo modo:
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;
}
L'unico problema con questo è che beginSheetModalForWindow:
rendimenti prova subito quindi non posso in modo affidabile chiedere all'utente una domanda e attendere una risposta. Questo non sarebbe un grosso problema se potessi dividere il compito in due aree, ma non posso.
Ho un ciclo che elabora circa 40 oggetti diversi (che si trovano in un albero). Se un oggetto fallisce, voglio che l'avviso mostri e chieda all'utente se continuare o interrompere (continuare l'elaborazione nel ramo corrente), ma poiché la mia applicazione è basata su documenti, le linee guida di Apple Human Interface dettano l'uso dei fogli quando l'avviso è specifico per un documento.
Come posso visualizzare il foglio di avviso e attendere una risposta?
Thread in ultima analisi, la strada da percorrere, suppongo. L'albero degli oggetti alla fine diventerà più grande e più complicato. – dreamlax
Senza vedere la tua app, è ovviamente difficile da dire, ma sei davvero sicuro di aver bisogno di discussioni?Non ho mai incontrato il caso in cui mettere la risposta nel metodo di callback era più complesso rispetto al threading dell'applicazione. –