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 来检查页面是否打开了文件,然后在页面打开文件后继续执行您的应用程序需要执行的任何操作。任何支持苹果脚本的应用程序都可以使用 scriptingbridge 编写脚本。找到应用程序的文档有点困难,但我认为它应该类似于苹果脚本。

Soem ScriptingBridge 文档:

http://www.mugginsoft.com/AutomationDocs

Apple ScriptingBridge 使用指南:

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

上面解释了如何使用脚本桥,并有一个 Pages 的例子(非常简短)。通过一些实验,您应该能够让您的应用程序检查页面是否每秒打开文件,直到文件打开(即,当文件未打开时,等待一秒钟 - 可能不是最好的方法,但它的东西)。我认为也有未记录的通知。希望它有所帮助。

于 2013-07-10T16:00:05.490 回答