- [NSWorkspace openFile: withApplication:] ожидает открытия приложения - PullRequest
2 голосов
/ 17 января 2012

Heyho, В моем приложении Obj-C я использую следующий код для открытия файла в Pages (или любом другом приложении):

    [[NSWorkspace sharedWorkspace] openFile:theUrl withApplication:@"Pages"];

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

    [[NSWorkspace sharedWorkspace] openFile:theUrl withApplication:@"Pages" onFinish:@selector(pagesfinishedopening)];

Конечно, я мог бы просто использовать функцию sleep (), но это замедляло бы приложение для небольших файлов и не работало бы, когда файлы больше, чем исключено. Я уже пробовал что-то с NSApplication, но тогда открытие файла в Pages не соблюдается, можно отслеживать только запуск целевого приложения.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 18 января 2012

Вы можете прослушивать уведомления , поступающие из NSWorkSpace, как показано ниже

- (void)myMethod {
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self
                                                       selector:@selector(appDidLaunch:)
                                                           name:NSWorkspaceDidLaunchApplicationNotification
                                                         object:nil];

    [[NSWorkspace sharedWorkspace] openFile:theUrl withApplication:@"Pages"];    
}

- (void)appDidLaunch:(NSNotification*)notification {
    NSLog(@"app info: %@", [notification userInfo]);
}
2 голосов
/ 10 июля 2013

Возможно, вы могли бы использовать scriptingbridge, чтобы проверить, открывали ли страницы файл, а затем продолжить работу с тем, что должно сделать ваше приложение после того, как страницы откроют файл.Любое приложение, которое поддерживает скрипт Apple, может быть написано с помощью скриптового моста.Немного сложно найти документацию для приложений, но я думаю, что она должна быть похожа на скрипт Apple.

Документация Soem ScriptingBridge:

http://www.mugginsoft.com/AutomationDocs

AppleРуководство по использованию ScriptingBridge:

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/UsingScriptingBridge/UsingScriptingBridge.html

Выше объясняется, как использовать скрипт-мост, и приведен пример для Pages (очень краткий).Проведя некоторые эксперименты, вы сможете убедиться, что ваше приложение проверяет, открывали ли страницы файл каждую секунду до его открытия (то есть, пока файл не открыт, подождите одну секунду - вероятно, это не лучший способ сделать это, но это что-то).Я думаю, что есть и недокументированные уведомления.Надеюсь, это поможет.

...