有没有办法unfilter一NSPasteboard为什么源应用具体的宣布它将提供?

我试图serialize纸板数据在我的应用程序。当另一个应用程序的地方RTF上的文件纸板然后我请求提供的类型,我得到了十一个不同的口味的说RTF,一切都从原来的RTF为普通的字符串dyn。* 值。

省掉所有数据并入一个plist或原始数据上的磁盘通常不是一个问题,因为这是很小的,但当一个图像的任何相当大的尺寸是放在剪贴板,得到的输出可以数倍的源数据(与多种口味的TIFF和PICT数据正在提供通过滤波)。

我想就能够节省了原来的应用程序提出,如果可能的。


约翰,你更敏锐于自己或绅士我的工作与谁一直在做Mac编程自从恐龙漫游地球。我们都不曾注意到的文本强调了...我不知道为什么.起太长时间的问题,显然。

虽然我接受你的回答正确的答案,它不会确切地回答我的问题。我一直在寻找一种方法来鉴别的味道,可以成为其他的味道简单地通过,将它们放在剪贴板 要知道哪些类型最初提供的供应商。同时步行的类型清单将得到我的优选顺序的应用程序提供他们,也不会告诉我那些我可以忽略,因为他们将可以重新创建的时候我再充纸板后。

我得出的结论是,没有一个"好"的方式做到这一点。 [NSPasteboard declaredTypesFromOwner] 将是美妙的,但这并不存在。

有帮助吗?

解决方案

-[NSPasteboard types] 将返回的所有可用的类型的剪贴板上的数据,但它应当返回他们 "以他们的声明。"

该文件 -[NSPasteboard declareTypes:owner:] 说的 "类型应当下令根据的偏好来源应用程序。"

一个恰当实现的纸板所有者,因此应宣布最富有代表性的内容(可能的原创内容),作为第一类型;因此,一个合理的单一表示应该是:

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

其他提示

你可能能够得到一些使用了 +[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];
}

我不知道效果如何,这将是在挑选良好的类型,但是。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top