是否有一种方法可以为源应用程序具体声明它将提供的内容打开NSPasteboard?
我正在尝试序列化我的应用程序中的粘贴板数据。当另一个应用程序将RTF文件放置在黑板上,然后请求可用的类型时,我会得到11种不同类型的RTF,从原始的RTF到普通字符串到dyn.*值。
将所有这些数据保存到磁盘上的plist或原始数据通常并不是一个问题,因为它非常小,但是当任意大小的图像放在黑板上时,产生的输出可能比源数据大几十倍(通过过滤提供多种类型的TIFF和PICT数据)。
我只想能够保存原来的应用程序,如果可能的话。
约翰,你比我和我一起工作的那位先生更善于观察,自从恐龙在地球上漫游以来,他一直在做Mac编程。我们都没注意到你突出的文字..。我不知道为什么。显然,从这个问题开始太久了。
虽然我接受你的回答是正确的,但它并没有完全回答我原来的问题。我所要寻找的是一种方法,通过将它们放置在黑板、和上,以确定这些类型中的哪一种最初是由提供商提供的,从而识别出可以成为其他口味的口味。虽然浏览类型列表将给我提供它们的应用程序的首选订单,但它不会告诉我哪些是我可以安全忽略的,因为它们将在我稍后重新填充画板时重新创建。
我得出的结论是,没有一种“好的”方法可以做到这一点。[NSPasteboard declaredTypesFromOwner]会很棒,但它并不存在。
发布于 2008-09-11 22:06:49
-[NSPasteboard types]将返回剪贴板上数据的所有可用类型,但它应该返回它们“按照他们被宣布的顺序。”。
-[NSPasteboard declareTypes:owner:]的文档显示,“类型应根据源应用程序的偏好排序。”
因此,适当实现的纸板所有者应将内容的最丰富的表示形式(可能是原始内容)宣布为第一种类型;因此,合理的单一表示应该是:
[pb dataForType:[[pb types] objectAtIndex:0]]发布于 2008-09-12 18:32:25
您也许可以从+[NSPasteboard typesFilterableTo:]中得到一些使用。我想象的是这样的片段:
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];
}不过,我不知道这对挑选好的类型有多有效。
https://stackoverflow.com/questions/54760
复制相似问题