将 nsmutableattributed 字符串粘贴到 public 粘贴板会丢失页面中的属性

paste of nsmutableattributed string to public pasteboard loses attributes in pages

我正在创建一个 mac 独立服务,将属性字符串放在粘贴板上。当页面访问数据时,字符串将失去其属性。我使用以下代码粘贴字符串,并将 NSReturnTypes 值设置为 NSStringPboardType。

    NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"Yay, I'm a string"];

[str beginEditing];

[str addAttribute:NSUnderlineStyleAttributeName
               value:[NSNumber numberWithInt:NSUnderlineByWord]
               range:NSMakeRange(0,str.length)];

[str endEditing];

[pboard clearContents];
[pboard writeObjects:[NSArray arrayWithObject:str]];

笔记和邮件等非 iWork 应用程序可以很好地处理这些属性,但页面坚持要删除它们。如何创建可按页面、基调和数字处理的粘贴板数据?

更新: 显然,iWork 将当前样式应用到粘贴在文档中现有文本上的文本的第一个换行符。我假设段落样式在这之后,但在此感谢任何帮助。

UPDATE2: 这似乎是页面如何从剪贴板接受数据的错误。

还没有人向您提供任何东西,所以这里是一种方法而不是答案:

I am assuming that paragraph styles are behind this, but would appreciate any help here.

不要假设,测试。

编写一个简单的应用程序,让您可以检查剪贴板上的内容。然后打开 TextEdit & Pages 并在应用程序内和应用程序之间复制和粘贴内容。查看剪贴板上的内容。即使 未选择 ,Pages 也会进行一定数量的 "match style" 粘贴。

当然请注意,此问题不仅限于您的应用程序,正如您从 TextEdit(或 Word )复制到 Pages 时会看到的那样。您的目标似乎是将页面复制到页面复制和粘贴,这可能可行也可能不可行。

附录

如果您在查看剪贴板方面需要帮助,Apple 有示例代码可以执行此操作,ClipboardViewer。只需比较从 TextEdit 和 Pages 复制时带下划线的单词。相当多的差异,包括 iWork 特定的数据类型。

HTH

这似乎是 Pages 中的一个错误,或者是预期的行为。 https://discussions.apple.com/message/30971829?ac_cid=op123456#30971829