2009-10-16 2 views
0

я, кажется, точную проблему противоположному, чем this question on stopping dock bounce.Не удается получить NSAlert постоянно подпрыгивать док значок

Я не могу получить мое приложение постоянно подпрыгивать значок док-станции!

Я слишком ненавижу постоянно отскакивать значки док-станции, но в этом случае, если пользователь не понимает, что мое приложение не может запускаться, они могут потерять часы отслеживания времени.

Вот мой код, который я положил в приложение, делегирует applicationWillFinishLaunching: method.

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 line.

Я попытался положить requestUserAttention линию в большом количестве разных местах: непосредственно перед вызовом runModal, первая вещь, и т.д.

Я попытался удалить строку activateIgnoringOtherApps.

Независимо от того, что я делаю, значок док-станции отскакивает один раз, а затем останавливается.

Пользователь, вероятно, увидит, что мое приложение, как я приношу его на передний план, но есть вероятность, что если они нажмут в нужное время, их активное приложение скроет критическое сообщение об ошибке.

Так что я хочу что-то, чтобы даже когда их пристань скрыта, они знают, что что-то не так.

Я строю это на Mac OS X 10.5 Leopard. Любые идеи о том, что я делаю неправильно? Или Leopard не поддерживает непрерывное подпрыгивание значков док-станции?

UPDATE:

Я укладывал вызов метода в applicationWillFinishLaunching:

Как только я положил его в applicationDidFinishLaunching :, и удалила activateIgnoringOtherApps: вызов, он работал по мере необходимости.

Однако мой вопрос все еще «Могу ли я взять с собой приложение на фронт, а также прыгающий значок док? С первого ответа, казалось бы, нет, хотя я не уверен, я понимаю, почему.

UPDATE:..

Я не понимаю, почему, потому что я не думал, через Теперь, когда это было сказано мне, что красть фокус означает док получил то, что он хотел, это имеет смысл

Заключение

Если вы хотите обратить внимание пользователей, не используйте [NSApp activateIgnoringOtherApps: YES];

+0

Подумайте об этом: приложение отскакивает от значка, чтобы сообщить пользователю, что хочет по каким-то причинам стать фронтовиком. После того, как он получит самый передний статус, Dock предполагает, что вы получили то, что хотели, и перестали подпрыгивать значок. Также подумайте о том, что вы сделали бы с приложением, которое произвольно принесло бы себя и все его окна на фронт, пока вы были в середине набора текста или рисования или чего-то почти ничего. Если ваши предупреждения не имеют поистине опасного для жизни характера, не будьте рывком и воруйте фокус. –

+0

Конечно. Это имеет смысл, когда я, э ... думаю об этом. Как я этого явно не делал. :) Я не видел, что я делаю как «краду фокуса», но когда вы так выразились, я вижу, что это неприемлемо. activateIgnoringOtherApps: YES будет побежден из моего инструментария с этого момента! Спасибо за ваш комментарий. –

ответ

2

Если вы отправляете activateIgnoringOtherApps, вы в основном отклоняете свое собственное уведомление.

+0

ОК. Таким образом, это выбор между переносом приложения на передний план и подпрыгиванием значка док-станции. У меня не может быть обоих. Это правильно? –

+0

Приведение приложения к фронту должно включать первого ответчика. Я изучаю iPhone, но я думаю, что это похоже. – JoePasq