代码之家  ›  专栏  ›  技术社区  ›  robinjam

使用Cocoa脚本桥创建iPhoto相册

  •  1
  • robinjam  · 技术社区  · 16 年前

    我正在努力从一个可可应用程序创建一个新专辑。在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];
    

    但那没有效果。

    请帮助!

    2 回复  |  直到 16 年前
        1
  •  2
  •   has    16 年前

    我没费心检查,但我怀疑 a bug in SDP或脚本桥,其中具有关键字参数的命令针对的是主 application 对象由SDP提供一个方法名(例如 -newAlbumName: )和另一个方法名( -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];
    
        2
  •  3
  •   mouviciel    16 年前

    我曾经尝试过使用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];
    
    推荐文章