avviso circa la soluzione consigliata:
Questo codice provoca uno spreco e inutile sovraccarico:
for (;;) {
if ([NSApp runModalSession:session] != NSRunContinuesResponse)
break;
}
Questo codice viene copiato direttamente dalla pagina di documentazione di Apple - ma ha lo scopo di mostrare allo sviluppatore dove può essere inserito un codice significativo per l'esecuzione in background mentre il modale è in esecuzione. Cioè, dovresti avere del codice tra la pausa e la parentesi di chiusura. Ma non vi è alcun codice reale mostrato nell'esempio - e eseguirlo in questo modo fa sì che l'applicazione esegua il polling della sessione ripetutamente fino alla fine. È come il bambino di due anni sul sedile posteriore della macchina in un viaggio in cui si chiede: "Siamo già arrivati? Siamo ancora lì? Siamo già lì? ..."
Se vuoi semplicemente esecuzione modale, in cui l'applicazione presenta una finestra modale e sospende l'elaborazione di/sfondo finestre principali fino al termine modali, utilizzare questo:
[NSApp runModalForWindow: self.window];
... e poi uscire dalla sessione di modal quando la finestra si chiude facendo cadere questo in sottoclasse del controllore di finestre:
- (void)windowWillClose:(NSNotification *)notification {
[NSApp stopModal];
}
fonte
2012-08-18 18:50:04
Tecnicamente, non è chiamato un foglio se è in esecuzione in un modo mod-app. – JWWalker
Un avviso modale app con sfondo personalizzato e colore del testo sembra essere piuttosto sgradevole. Hai davvero * bisogno * di fare questo? Hai letto [Mac Human Interface Guidelines] (http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AppleHIGuidelines/Intro/Intro.html)? –
Non è affatto cattivo, davvero. Gli avvisi non si adattano alle mie esigenze, dal momento che sto lavorando con un'applicazione a schermo intero e sto usando 'NSStatusWindowLevel'. Ho letto quelle linee guida qualche tempo fa, sì. – Fatso