【发布时间】:2011-10-16 09:13:44
【问题描述】:
我正在尝试使用 Scripting Bridge 从我的应用程序中修改现有的 Pages 文档。我已遵循文档中提到的所有步骤:我创建了一个头文件并彻底检查了它,但我就是不知道如何执行此操作。
我基本上是在尝试进行搜索和替换:我有一个字符串列表,我想用这些字符串替换一些搜索值。问题是我无法弄清楚 PagesWord 类是如何工作的。我只想从中获取一个字符串,并将其与我的搜索值进行比较。我目前必须以下代码:
PagesApplication *pages = [SBApplication applicationWithBundleIdentifier:@"com.apple.iWork.Pages"];
PagesDocument *document = [pages open:inputURL];
PagesText *bodyText = [document bodyText];
SBElementArray *words = [bodyText words];
NSLog([NSString stringWithFormat:@"%d words.", [words count]]);
for (PagesWord *word in [bodyText words]) {
NSLog((NSString *)word);
}
在最后 3 行之前一切正常:打开了正确的 Pages 文档并记录了字数,但字符串没有:我只看到异常消息。我也尝试使用 PagesWord 的属性,但我遇到了同样的问题......
谁能帮帮我?
【问题讨论】:
-
我知道你的代码为什么会崩溃:你不能将
word转换为NSString *,因为它不是字符串;请改用[[word properties] objectForKey:@"contents"]。此外,您应该始终将文字字符串指定为NSLog()的第一个参数;例如:NSLog(@"%@", [[word properties] objectForKey:@"contents"]);和NSLog(@"%lu words", [words count]);。不过,我不知道如何替换单词。 -
@Bavarious:谢谢!我在任何地方都找不到代码
[[word properties] objectForKey:@"contents"]);。你在哪里找到的? -
由于 Pages 没有将
contents导出为PagesWord的 Objective-C 属性,我打印出整个properties字典:NSLog(@"word properties: %@", [word properties]);并看到字典包含单词本身在键contents下。希望有人会插话并回答如何替换单词。 -
嗯,好的。这真的很聪明,我会记住的。不是吗,因为根据 Scripting Bridge 文档,所有单词都是对实际单词的引用,所以我可以只修改单词吗?
-
@Bavarious:哦等等,我当然不能这样做,因为它是 NSDictionary 而不是 NSMutableDictionary...
标签: objective-c xcode nsstring scripting-bridge