Heyho, 在我的Obj-C应用程序中,我使用以下代码在Pages(或任何其他应用程序)中打开文件:
[[NSWorkspace sharedWorkspace] openFile:theUrl withApplication:@"Pages"];
主要是在打开较大的文件时,可能需要几秒钟才能完成。 所以我希望我的应用程序等待Pages直到它完全打开文件。 以下代码是我喜欢的方式:
[[NSWorkspace sharedWorkspace] openFile:theUrl withApplication:@"Pages" onFinish:@selector(pagesfinishedopening)];
当然我可以简单地使用sleep()函数,但是这会减慢小文件上的应用程序速度,并且当文件大于例外时不会起作用。 我已经尝试过使用NSApplication,但是后来不打开Pages中文件的打开,只能监视目标应用程序的开始。
任何想法?
答案 0 :(得分:3)
您可以收听来自NSWorkSpace的notifications,如下所示
- (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]);
}
答案 1 :(得分:2)
也许您可以使用scriptingbridge检查页面是否打开文件,然后在页面打开文件后继续执行应用程序需要执行的操作。任何支持Apple脚本的应用程序都可以使用scriptingbridge编写脚本。找到应用程序的文档有点困难,但我认为应该类似于苹果脚本。
Soem ScriptingBridge文档:
http://www.mugginsoft.com/AutomationDocs
Apple ScriptingBridge使用指南:
以上解释了如何使用脚本桥,并有一个页面示例(非常简短)。通过一些实验,你应该可以让你的应用程序检查页面是否每秒打开文件直到它打开(即文件未打开,等待一秒 - 可能不是最好的方法,但它的东西)。我认为还有未记录的通知。希望它有所帮助。