我有一个NSPasteboard:
NSPasteboard *pasteboard;
并获得:
pasteboard = [[NSPasteboard generalPasteboard] retain];
现在我想确定最后一个条目的类型,如格式化文本或图像等,如果是文本,则获取其内容等。
如何找出贴纸中的数据类型?
我记录了[粘贴板类型]的输出:
2011-05-07 20:13:30.491 YourApp[15335:903] Pasteboard changed: (
"public.utf8-plain-text",
NSStringPboardType,
"dyn.ah62d4rv4gu8y63n2nuuhg5pbsm4ca6dbsr4gnkduqf31k3pcr7u1e3basv61a3k",
"NeXT smart paste pasteboard type"
)
但我不确定如何检查文字或其他内容......
答案 0 :(得分:6)
Pasteboard Programming Guide完全涵盖了这一点。执行此操作的标准方法是列出您感兴趣的类型,然后只要求粘贴板为您提供这些类型。如果它有这些类型的对象,你就可以得到它们。否则,你什么也得不到。
NSPasteboard * pboard = [NSPasteboard generalPasteboard];
NSArray * interestingTypes;
interestingTypes = [NSArray arrayWithObjects:[NSAttributedString class],
[NSString class], nil];
NSArray * pboardContents = [pboard readObjectsForClasses:interestingTypes
options:nil];
if( pboardContents ) {
// Use the contents
}
您还可以使用不同的类型列表进行多次查询:
NSArray * imgType = [NSArray arrayWithObject:[NSImage class]];
NSArray * strType = [NSArray arrayWithObject:[NSString class]];
NSArray * pboardImg = [pboard readObjectsForClasses:imgType
options:nil];
NSArray * pboardStr = [pboard readObjectsForClasses:strType
options:nil];
if( pboardImg ){
// Got an image!
}
if( pboardStr ){
// Got a string!
}
您也可以简单地询问粘贴板,如果它有您感兴趣的类型之一,而不实际获取对象。这会给您一个简单的YES
或NO
:
[pboard canReadObjectForClasses:interestingTypes
options:nil];
请注意,Snow Leopard中的粘贴板处理方式发生了变化,因此不幸的是,这种情况在Leopard中有所不同。