Wenn ich ein NSAlert so anzuzeigen, erhalte ich die Antwort sofort:Warten auf [NSAlert beginSheetModalForWindow: ...];
int response;
NSAlert *alert = [NSAlert alertWithMessageText:... ...];
response = [alert runModal];
Das Problem ist, dass dies anwendungs modal und meine Anwendung ist Dokument basiert. Ich zeige die Warnung im Fenster des aktuellen Dokuments durch Blätter verwendet wird, wie folgt aus:
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;
}
Das einzige Problem dabei ist, dass beginSheetModalForWindow:
kehrt sofort, so kann ich nicht zuverlässig dem Benutzer eine Frage stellen und auf eine Antwort warten. Das wäre keine große Sache, wenn ich die Aufgabe in zwei Bereiche aufteilen könnte, aber ich kann nicht.
Ich habe eine Schleife, die etwa 40 verschiedene Objekte (die in einem Baum sind) verarbeitet. Wenn ein Objekt ausfällt, möchte ich, dass der Alarm angezeigt wird und der Benutzer gefragt wird, ob er fortfahren oder abbrechen soll (Fortsetzung der Verarbeitung im aktuellen Zweig). Da meine Anwendung jedoch dokumentbasiert ist, schreiben die Richtlinien für Apple-Benutzeroberflächen die Verwendung von Blättern vor spezifisch für ein Dokument.
Wie kann ich die Warnmeldung anzeigen und auf eine Antwort warten?
Threads meine letztlich der Weg zu gehen, nehme ich an. Der Objektbaum wird schließlich größer und komplizierter. – dreamlax
Ohne deine App zu sehen, ist es offensichtlich schwer zu sagen, aber bist du dir wirklich sicher, dass du Threads brauchst?Ich bin nie auf den Fall gestoßen, bei dem die Antwort in der Callback-Methode komplexer war als das Threading der App. –