如何获得粘贴板条目?

tam*_*gal 2 cocoa objective-c

我有一个NSPasteboard:

NSPasteboard *pasteboard;
Run Code Online (Sandbox Code Playgroud)

得到它:

pasteboard = [[NSPasteboard generalPasteboard] retain];
Run Code Online (Sandbox Code Playgroud)

现在我想确定最后一个条目的类型,如格式化文本或图像等,如果是文本,则获取它的内容等.

如何找出贴板中的数据类型?

我记录了[粘贴板类型]的输出:

2011-05-07 20:13:30.491 YourApp[15335:903] Pasteboard changed: (
    "public.utf8-plain-text",
    NSStringPboardType,
    "dyn.ah62d4rv4gu8y63n2nuuhg5pbsm4ca6dbsr4gnkduqf31k3pcr7u1e3basv61a3k",
    "NeXT smart paste pasteboard type"
)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何检查它是否是文字或其他任何东西......

Jos*_*ell 6

" 粘贴板编程指南"中对此进行了全面介绍.执行此操作的标准方法是列出您感兴趣的类型,然后只要求粘贴板为您提供这些类型.如果它有这些类型的对象,你就可以得到它们.否则,你什么也得不到.

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
}
Run Code Online (Sandbox Code Playgroud)

您还可以使用不同的类型列表进行多次查询:

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!
}
Run Code Online (Sandbox Code Playgroud)

您也可以简单地询问粘贴板是否具有您感兴趣的类型之一,而无需实际获取对象.这会给你一个简单的YESNO:

[pboard canReadObjectForClasses:interestingTypes
                        options:nil];
Run Code Online (Sandbox Code Playgroud)

请注意,Snow Leopard中的粘贴板处理方式发生了变化,因此,不幸的是,Leopard中的这种情况完全不同.