3

私の Obj-C アプリでは、次のコードを使用して Pages (またはその他のアプリケーション) でファイルを開きます。

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

主に大きなファイルを開く場合、完了するまでに数秒かかる場合があります。したがって、アプリケーションがファイルを完全に開くまでページを待機させたいと思います。

次のコードは、私がやりたい方法です。

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

もちろん、単純に sleep() 関数を使用することもできますが、これは小さなファイルでアプリの速度を低下させ、ファイルが例外よりも大きい場合には機能しません。

私はすでに NSApplication で何かを試しましたが、Pages でのファイルのオープンは尊重されず、ターゲット アプリケーションの開始のみを監視できます。

何か案は?

4

2 に答える 2

3

以下に示すように、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]);
}
于 2012-01-18T09:00:22.680 に答える
2

おそらく、scriptingbridge を使用して、ページがファイルを開いたかどうかを確認し、ページがファイルを開いたときにアプリが必要とする処理を続行できます。Apple スクリプトをサポートするすべてのアプリは、scriptingbridge を使用してスクリプト化できます。アプリのドキュメントを見つけるのは少し難しいですが、Apple スクリプトに似ているはずです。

Soem ScriptingBridge のドキュメント:

http://www.mugginsoft.com/AutomationDocs

Apple ScriptingBridge 使用ガイド:

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

上記は、スクリプト ブリッジの使用方法を説明し、ページの例を示しています (非常に簡単です)。いくつかの実験を行うと、ページがファイルを開くまで毎秒ファイルが開かれたかどうかをアプリで確認できるようになるはずです (つまり、ファイルが開かれていない間は、1 秒待ちます。これはおそらく最善の方法ではありませんが、何とかなります)。文書化されていない通知もあると思います。それが多少役立つことを願っています。

于 2013-07-10T16:00:05.490 に答える