Na przykład otrzymaj powiadomienie, że inna aplikacja staje się aktywna na ekranie lub zrezygnuj ze stanu aktywnego.
Odpowiedzi:
7 dla odpowiedzi № 1Pewnie. W klasie delegata aplikacji możesz użyć NSWorkspace
aby otrzymywać powiadomienia, gdy aplikacja stanie się aktywna (NSWorkspaceDidActivateApplicationNotification
) lub rezygnuje aktywny (NSWorkspaceDidDeactivateApplicationNotification
). Zobacz dokumentację na NSWorkspace
po więcej informacji.
W swojej klasie kontrolera zrobiłbyś coś takiego:
- (id)init {
if ((self = [super init])) {
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
selector:@selector(appDidActivate:)
name:NSWorkspaceDidActivateApplicationNotification
object:nil];
}
return self;
}
- (void)dealloc {
[[[NSWorkspace sharedWorkspace] notificationCenter] removeObserver:self];
[super dealloc];
}
- (void)appDidActivate:(NSNotification *)notification {
NSDictionary *userInfo = [notification userInfo];
NSLog(@"userInfo == %@", userInfo);
}
Najważniejsze jest to, że musisz się zarejestrować, aby otrzymywać powiadomienia, jak pokazano na -init
. Powtórz kod, aby dodać kolejnego obserwatora dla każdej dodatkowej nazwy powiadomienia, którą chcesz (np NSWorkspaceDidDeactivateApplicationNotification
).
Kolejną ważną rzeczą do zapamiętania jest usunięcie siebie jako obserwatora w -dealloc
(lub gdzie indziej), aby NSWorkspace
nie próbuje powiadomić obiektu kontrolera po jego wydaniu+dealloc"d (i nie będzie już prawidłowy).
W określonym -appDidActivate:
metody, zrób wszystko, co musisz, z informacjami o danej aplikacji.
0 dla odpowiedzi nr 2
Jeśli chcesz czegoś prostszego niż rozproszone obiekty, możesz użyć rozproszonych powiadomień zrozproszone centrum powiadomień. Jednak nie są one publikowane, chyba że zbudowałeś aplikację. Do monitorowania uruchamiania lub zamykania aplikacji można użyć NSWorkspace i jego centrum powiadomień (sugerowane przez NSGod)