首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无滤波NSPasteboard

无滤波NSPasteboard
EN

Stack Overflow用户
提问于 2008-09-10 17:20:03
回答 2查看 1.1K关注 0票数 5

是否有一种方法可以为源应用程序具体声明它将提供的内容打开NSPasteboard?

我正在尝试序列化我的应用程序中的粘贴板数据。当另一个应用程序将RTF文件放置在黑板上,然后请求可用的类型时,我会得到11种不同类型的RTF,从原始的RTF到普通字符串到dyn.*值。

将所有这些数据保存到磁盘上的plist或原始数据通常并不是一个问题,因为它非常小,但是当任意大小的图像放在黑板上时,产生的输出可能比源数据大几十倍(通过过滤提供多种类型的TIFF和PICT数据)。

我只想能够保存原来的应用程序,如果可能的话。

约翰,你比我和我一起工作的那位先生更善于观察,自从恐龙在地球上漫游以来,他一直在做Mac编程。我们都没注意到你突出的文字..。我不知道为什么。显然,从这个问题开始太久了。

虽然我接受你的回答是正确的,但它并没有完全回答我原来的问题。我所要寻找的是一种方法,通过将它们放置在黑板、上,以确定这些类型中的哪一种最初是由提供商提供的,从而识别出可以成为其他口味的口味。虽然浏览类型列表将给我提供它们的应用程序的首选订单,但它不会告诉我哪些是我可以安全忽略的,因为它们将在我稍后重新填充画板时重新创建。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2008-09-11 22:06:49

-[NSPasteboard types]将返回剪贴板上数据的所有可用类型,但它应该返回它们“按照他们被宣布的顺序。”

-[NSPasteboard declareTypes:owner:]的文档显示,“类型应根据源应用程序的偏好排序。”

因此,适当实现的纸板所有者应将内容的最丰富的表示形式(可能是原始内容)宣布为第一种类型;因此,合理的单一表示应该是:

代码语言:javascript
复制
[pb dataForType:[[pb types] objectAtIndex:0]]
票数 4
EN

Stack Overflow用户

发布于 2008-09-12 18:32:25

您也许可以从+[NSPasteboard typesFilterableTo:]中得到一些使用。我想象的是这样的片段:

代码语言:javascript
复制
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];
}

不过,我不知道这对挑选好的类型有多有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档