我的想法是,我有一个需要打开的文件模板,但它应该表现得好像只打开了文件的内容而不是文件本身。
用户的不同之处应该是,他需要选择一个地方来保存文件,而不是只覆盖打开的文件。
在预览应用中可以看到类似的行为。复制功能时,预览将在新窗口中打开相同的文件。保存文件后,用户需要指定将其保存到的位置。
据我所知,NSWorkspace
不支持开箱即用的此类行为。有人知道解决方法吗?我很感激!
在我的情况下,我不知道用户在完成文件时想要将文件保存到哪里。目前我只是将文件复制到用户主目录中的隐藏文件夹,然后打开副本,以便原始文件不会被覆盖。
产生的行为是: - 用户看不到文件的位置 - 保存并关闭用户在用户中编辑文件时,将无法再找到该文件。
解决方法:我想现在我会在打开之前询问用户她想要保存的位置,这对我来说似乎有点多余,因为它很可能是她不想要的保存它。希望我能尽快找到更好的解决方案。
答案 0 :(得分:0)
您可以通过发送"开放内容来实现这一目标。 ('ocon'
/ kAEOpenContents
)Apple活动到目标应用。最简单的方法可能是使用Scripting Bridge。
使用Scripting Bridge的常规方法要求您事先知道要定位的应用程序,并从其脚本接口定义生成Objective-C标头。但是,您应该能够使用它" raw"。例如,像这样:
SBApplication *app = [SBApplication applicationWith...:...]; // there are method to take a PID, a bundle ID, or a URL
[app activate];
NSAppleEventDescriptor *desc = [NSAppleEventDescriptor descriptorWithString:@"foobar"];
[app sendEvent:kCoreEventClass id:kAEOpenContents parameters:keyDirectObject, desc, nil];
NSAppleEventDescriptor
对象是内容有效负载,在本例中是字符串" foobar"。您可以使用其他方法来创建不同类型的有效负载。如果您使用通用类型并需要描述符类型,则可以查看/System/Library/Frameworks/CoreServices.framework/Frameworks/AE.framework/Headers中的标题(例如AEDataModel.h或AERegistry.h)。