gpt4 book ai didi

objective-c - Scripting Bridge 和 com.apple.iWork.Pages——这行得通吗?

转载 作者:搜寻专家 更新时间:2023-10-30 20:07:01 25 4
gpt4 key购买 nike

我正在尝试使用脚本桥计算 Pages 文档(doc 格式为 RTF)中的字数。 (我可以使用 NSApplescript 做到这一点,但我宁愿在我的代码中没有所有的 applescript-aware 胶带)当我使用 applescript(和 NSAppleScript API)执行此任务时,我可以非常简单地(并成功地)完成此任务:

on wordCount(appName,docName)
local mydoc
local wordcount
tell application appName
set mydoc to document docName
set wordcount to count of words of mydoc
log "wordcount = " & wordcount
return wordcount
end tell
end wordCount

但是,当我尝试使用脚本桥进行等效操作时,我所有的对象似乎都包含空内容。我的代码如下:

+ (NSUInteger) wordCountForApp: (SBApplication*) sbApp docNamed: (NSString*) docName
{
PagesApplication *pages = (PagesApplication*)sbApp;
PagesDocument *doc = [[pages documents] objectWithName:docName];
PagesText *text = [doc bodyText];
SBElementArray *words = [text words];
NSUInteger wc = [words count];
NSLog(@"Pages word count = %ul", (unsigned int) wc);
return wc; // wc comes back as zero always ... grrrr
}

我已经验证我正在主线程上运行这些东西(并且等效代码适用于 TextEdit)。关于正在发生的事情/如何解决的任何想法?

感谢您阅读到这里....

最佳答案

该代码对我有用。 F-Script 中的等价物:

> pages := SBApplication applicationWithBundleIdentifier: 'com.apple.iWork.Pages'

> (pages documents objectWithName: 'fun') bodyText words count
303

我建议您使用调试器逐步检查它并确保每个对象都是您所期望的,即 pages[pages documents] 等.

如果您编写此代码供外部使用,理想情况下您不应按名称引用文档;用户可能打开了多个同名文档。

另一个选项是 objc-appscript ,它提供了一个简洁的 ASTranslate 实用程序,可将 AppleScript 转换为 Objective-C(或用于其他 appscript 绑定(bind)的 Ruby 或 Python)。例如,对于上面的内容,你会有类似的东西:

#import "PGGlue/PGGlue.h"
PGApplication *pages = [PGApplication applicationWithName: @"Pages"];
PGReference *ref = [[pages documents] byName: @"fun"];
PGCountCommand *cmd = [[ref count] each: [PGConstant word]];
id result = [cmd send];

关于objective-c - Scripting Bridge 和 com.apple.iWork.Pages——这行得通吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7234302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com