Ostrzeżenie o zalecanym rozwiązaniem:
Ten kod powoduje marnotrawstwo i bezcelowe napowietrznych:
for (;;) {
if ([NSApp runModalSession:session] != NSRunContinuesResponse)
break;
}
Kod ten jest kopiowany prosto ze strony dokumentacji firmy Apple - ale ma na celu pokazać programistce , w której można wstawić znaczący kod do wykonania w tle podczas działania modala. Oznacza to, że powinieneś mieć kod między przerwą a nawiasem zamykającym. Ale nie ma rzeczywistego kodu pokazanego w przykładzie - i uruchamianie go w ten sposób powoduje, że aplikacja wielokrotnie odpytuje sesję, aż się skończy. To jest jak dwulatek na tylnym siedzeniu samochodu na wycieczce z pytaniem "Czy jesteśmy tam jeszcze?" Czy jesteśmy tam jeszcze? Czy jesteśmy tam jeszcze? ... "
Jeśli chcesz tylko prosto modalne wykonanie, w którym aplikacja prezentuje okno modalne i wstrzymuje przetwarzanie głównych okien/t aż modalnych końcach, użyj tego:
[NSApp runModalForWindow: self.window];
... a potem zamknąć sesję modalne, gdy okno zamyka zrzucając to na Twoja podklasa kontrolera okiennego:
- (void)windowWillClose:(NSNotification *)notification {
[NSApp stopModal];
}
Technicznie nie jest nazywana arkuszem, jeśli działa sposób app-modalny. – JWWalker
Alert app-modalny z niestandardowym tłem i kolorem tekstu brzmi, jakby był dość nieprzyjemny. Czy naprawdę * potrzebujesz * to zrobić? Czy przeczytałeś [Wytyczne dla Mac Human Interface] (http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/AppleHIGuidelines/Intro/Intro.html)? –
To wcale nie jest wredne. Alerty nie odpowiadają moim potrzebom, ponieważ pracuję z aplikacją pełnoekranową i używam 'NSStatusWindowLevel'. Czytałem te wytyczne jakiś czas temu, tak. – Fatso