3

我正在编写一个 Cocoa 应用程序,我想使用 Scripting Bridge 从我的应用程序生成一个 Numbers 电子表格。我生成了 Numbers.h 文件并按照Apple 文档中的说明链接了 ScriptingBridge.framework 。下面是我用来尝试简单地创建 Numbers 文档并保存它的代码。

NSString *path = @"/Users/username/Desktop/Test.numbers";

NumbersApplication *numbers = [SBApplication applicationWithBundleIdentifier:@"com.apple.iWork.Numbers"];

[numbers activate];

NumbersDocument *document = [[[numbers classForScriptingClass:@"document"] alloc] initWithProperties:[NSDictionary dictionaryWithObjectsAndKeys:project.title, @"name", nil]];

[[numbers documents] addObject:document];

[document saveAs:nil in:[NSURL URLWithString:path]];

代码编译并运行,当我尝试 saveAs:in: 方法时,出现以下错误:

-[SBProxyByClass saveAs:in:]: 对象尚未添加到容器中;选择器无法识别 [self = 0x2005912e0]

除了将文档添加到 [numbers 文档] 数组之外,我还需要做些什么吗?

我愿意使用 AppleScript,但如果可以的话,我更喜欢使用 Scripting Bridge。

4

2 回答 2

1

嗯,用 SB 编写数字脚本;两个黑色艺术的价格。我建议先尝试在 AppleScript 中执行此操作,以便稍微缩小问题范围。

如果它在 AS 中也出现问题,那么要么是您错误地表达了命令,要么是 Numbers 中有问题。由于大多数应用程序脚本编写者都使用 AppleScript,因此如果您能提供他们能够识别的代码,您会发现更容易获得帮助。

如果它有效,那么您将命令转换为 ObjC 是不正确的,或者 SB 中存在问题。在 AS 中有一个工作示例将为找出问题所在提供一个起点。

您还可以查看objc-appscript,它提供了一种更可靠、更少混淆的 SB 替代方案。它的 ASTranslate 工具可以轻松地将工作 AS 命令转换为 ObjC 语法。

于 2010-06-11T20:42:37.393 回答
0

Numbers 尚不支持通过 Applescript 创建文档。您必须使用 GUI 脚本。Numbers 的新版本应该会在 2011 年 1 月 6 日发布,并且(希望)将修复其严重受限的 Applescript 支持。

于 2010-12-23T17:06:55.713 回答