为了从一个Cocoa应用程序创建一个新的相册,我拼命工作。在applescript中,这是一个很好的简单过程:
tell application "iPhoto"
new album name "Album"
end tell但是我不知道如何通过脚本桥在Cocoa中做到这一点。我试过了:
iPhotoApplication *iPhoto = [SBApplication applicationWithBundleIdentifier:@"com.apple.iPhoto"];
iPhotoAlbum *newAlbum = [[[[iPhoto classForScriptingClass:@"album"] alloc] initWithProperties:[NSDictionary dictionaryWithObject:@"Album" forKey:@"name"]] autorelease];
[[iPhoto albums] addObject:newAlbum];但这并没有效果。
请帮帮我!
发布于 2010-05-11 04:26:08
我没有费心去检查,但是我怀疑有a bug in,或者sdp或者Scripting Bridge,其中带有关键字参数的命令针对主application对象,sdp会给出一个方法名(例如-newAlbumName:),SB会给出一个不同的方法名(-newAlbum:name:)。由于您无法破解SB,因此您需要修补sdp生成的头部以使用后一种方法,并将nil作为第一个参数传递。
或者,您可以使用appscript,它比SB更强大,也更不容易出现应用程序兼容性问题。它还提供了更好的开发工具和支持。例如,通过附带的ASTranslate工具运行AppleScript会生成以下objc-appscript代码:
#import "IPGlue/IPGlue.h"
IPApplication *iphoto = [IPApplication applicationWithName: @"iPhoto"];
IPNewAlbumCommand *cmd = [[iphoto newAlbum] name: @"Test"];
id result = [cmd send];发布于 2010-05-10 21:27:12
我曾经尝试使用Cocoa脚本桥,但没有成功。我的解决方法是使用NSAppleScript类:
NSString * scriptSource = [NSString stringWithFormat:
@"tell application \"iPhoto\" to import from \"%@\"", path];
NSAppleScript * exportScript =
[[NSAppleScript alloc] initWithSource:scriptSource];
[exportScript compileAndReturnError:NULL];
[exportScript executeAndReturnError:NULL];https://stackoverflow.com/questions/2802596
复制相似问题