【问题标题】:Scripting Bridge objective-c PagesWordScripting Bridge Objective-c PagesWord
【发布时间】: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


【解决方案1】:

替换我使用的单词:

for (PagesWord *word in [bodyText words]) {

[word select];

[[document selection] setTo:@"my new value"];}

【讨论】:

  • 哇,非常感谢!我已经放弃了这个,但如果这有效,它真的会帮助我。再次感谢!
  • 你知道如何选择多个对象吗?我需要选择多个字符,但是当我选择一个新字符时,旧的选择会被删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
相关资源
最近更新 更多