【问题标题】:Unfiltering NSPasteboard取消过滤 NSPasteboard
【发布时间】:2010-09-08 11:01:24
【问题描述】:

有没有办法针对源应用程序特别声明它将提供的内容取消过滤 NSPasteboard?

我正在尝试在我的应用程序中序列化粘贴板数据。当另一个应用程序将 RTF 文件放在粘贴板上,然后我询问可用类型时,我得到了 11 种不同风格的 RTF,从原始 RTF 到纯字符串再到 dyn.* 值。

将所有数据保存到磁盘上的 plist 或原始数据通常不是问题,因为它非常小,但是当在粘贴板上放置任何相当大的图像时,生成的输出可能会大几十倍比源数据(通过过滤提供多种 TIFF 和 PICT 数据)。

如果可能的话,我希望能够保存原始应用程序提供的内容。


约翰,你比我自己或与我一起工作的那位自恐龙在地球上漫游以来就一直在进行 Mac 编程的绅士要敏锐得多。我们都没有注意到你突出显示的文字......我不知道为什么。显然,在问题上开始的时间太长了。

虽然我接受了您的答案作为正确答案,但它并不能完全回答我最初的问题。我一直在寻找一种方法来识别可以变成其他口味的口味,只需将它们放在粘贴板上即可知道这些类型中的哪些最初是由供应商提供的。虽然遍历类型列表会给我提供提供它们的应用程序的首选顺序,但它不会告诉我可以安全地忽略哪些,因为稍后我重新填充粘贴板时会重新创建它们。

我得出的结论是,没有“好的”方法可以做到这一点。 [NSPasteboard declaredTypesFromOwner] 会很棒,但它不存在。

【问题讨论】:

    标签: cocoa filtering pasteboard


    【解决方案1】:

    -[NSPasteboard types] 将返回剪贴板上数据的所有可用类型,但它应该返回它们"in the order they were declared."

    -[NSPasteboard declareTypes:owner:] 的文档说 "the types should be ordered according to the preference of the source application."

    因此,正确实施的粘贴板所有者应将内容的最丰富表示(可能是原始内容)声明为第一类型;所以一个合理的单一表示应该是:

    [pb dataForType:[[pb types] objectAtIndex:0]]
    

    【讨论】:

      【解决方案2】:

      您也许可以从+[NSPasteboard typesFilterableTo:] 中得到一些用处。我正在想象这样一个 sn-p:

      NSArray *allTypes = [pb types];
      NSAssert([allTypes count] > 0, @"expected at least one type");
      
      // We always require the first declared type, as a starting point.
      NSMutableSet *requiredTypes = [NSMutableSet setWithObject:[allTypes objectAtIndex:0]];
      
      for (NSUInteger index = 1; index < [allTypes count]; index++) {
          NSString *aType = [allTypes objectAtIndex:index];
          NSSet *filtersFrom = [NSSet setWithArray:[NSPasteboard typesFilterableTo:aType]];
      
          // If this type can't be re-created with a filter we already use, add it to the
          // set of required types.
          if (![requiredTypes intersectsSet:filtersFrom])
              [requiredTypes addObject:aType];
      }
      

      不过,我不确定这对挑选好的类型有多大效果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        • 1970-01-01
        • 2017-04-23
        • 1970-01-01
        相关资源
        最近更新 更多