У меня, похоже, проблема прямо противоположная этому вопросу о прекращении отскока док-станции.
Я не могу заставить свое приложение постоянно отображать значок в доке!
Я тоже ненавижу постоянно подпрыгивать значки дока, но в этом случае, если пользователь не понимает, что мое приложение не может запуститься, они потенциально могут потерять часы данных отслеживания времени.
Вот мой код, который я поместил в метод делегирования приложения applicationWillFinishLaunching:.
if (!AXAPIEnabled()) { // I'm checking that Accessibility is turned on
NSAlert *alert = [[NSAlert alloc] init];
[alert setAlertStyle:NSCriticalAlertStyle];
[alert setMessageText:@"Lapsus cannot run."];
[alert addButtonWithTitle:@"Open Accessibility Prefs..."];
[alert addButtonWithTitle:@"Quit"];
[alert setInformativeText:@"Lapsus needs \"Enable access for assistive devices\" in the Accessibility pane of System Preferences to be turned on."];
[NSApp activateIgnoringOtherApps:YES];
int attentionrequest = [NSApp requestUserAttention:NSCriticalRequest];
NSInteger returnValue = [alert runModal];
....
[NSApp cancelUserAttentionRequest:attentionrequest];
}
Я попытался удалить строку requestUserAttention.
Я пробовал размещать строку requestUserAttention во многих разных местах: непосредственно перед вызовом runModal, первым делом и т. д.
Я попытался удалить строку activIgnoringOtherApps.
Что бы я ни делал, значок дока подпрыгивает один раз, а затем останавливается.
Пользователь, вероятно, увидит, что мое приложение выведено на передний план, но есть вероятность, что если они щелкнут в нужное время, их активное приложение скроет сообщение о критической ошибке.
Поэтому я хочу что-то, чтобы даже когда их док спрятан, они знали, что что-то не так.
Я строю это на Mac OS X 10.5 Leopard. Любые идеи о том, что я делаю неправильно? Или Leopard больше не поддерживает постоянно подпрыгивающие значки дока?
ОБНОВЛЕНИЕ:
Я помещал вызов метода в applicationWillFinishLaunching:
Как только я поместил его в applicationDidFinishLaunching: и удалил вызовactivIgnoringOtherApps:, он заработал как надо.
Тем не менее, мой вопрос по-прежнему звучит так: «Могу ли я вывести свое приложение на передний план, а также отобразить значок в доке? Судя по первому ответу, кажется, что нет, хотя я не уверен, что понимаю, почему.
ОБНОВЛЕНИЕ:
Я не понимал, почему, потому что я не думал об этом. Теперь, когда мне было указано, что кража фокуса означает, что док получил то, что хотел, это имеет смысл.
Заключение
Если вы хотите привлечь внимание пользователей, не используйте [NSAppactivateIgnoringOtherApps:YES];