首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从NSPasteboard mac获取剪贴板的对象

从NSPasteboard mac获取剪贴板的对象
EN

Stack Overflow用户
提问于 2018-08-01 18:49:12
回答 1查看 917关注 0票数 0

我需要获得NSPasteboard的对象并将其存储在某个地方,以便稍后将其放回剪贴板。我现在只对text属性执行此操作。我想知道如何处理任何对象(例如:复制文件)。到目前为止,我的代码是获取文本并将其放回原处的代码:

代码语言:javascript
复制
NSString *pasteboardString;

//Save the value of the pasteboard
NSPasteboard *pasteboard= [NSPasteboard generalPasteboard];
pasteboardString= [pasteboard stringForType:NSStringPboardType];

//Clear the pasteboard
[pasteboard clearContents];

//Do some stuff with clipboard

//Write the old object back
if(pasteboardString!= NULL || pasteboardString.length != 0){
    [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
    [pasteboard setString:pasteboardString forType:NSStringPboardType];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 14:00:56

我找到的最简单的方法是获取所有NSPasteboardItems的数组:

代码语言:javascript
复制
- (NSArray *)readFromPasteBoard
{
    NSMutableArray *pasteboardItems = [NSMutableArray array];
    for (NSPasteboardItem *item in [pasteboard pasteboardItems]) {
        //Create new data holder
        NSPasteboardItem *dataHolder = [[NSPasteboardItem alloc] init];
        //For each type in the pasteboard's items
        for (NSString *type in [item types]) {
            //Get each type's data and add it to the new dataholder
            NSData *data = [[item dataForType:type] mutableCopy];
            if (data) {
                [dataHolder setData:data forType:type];
            }
        }
        [pasteboardItems addObject:dataHolder];
    }
    return pasteboardItems;
}

从本页:Dissociating NSPasteboardItem from pasteboard

然后,您可以使用相同的数组( [pasteboard writeObjects:arrayPasteboardItems]; )在剪贴板操作之后将其写回pasteboard。

这将放回以前复制的任何对象(甚至文件、文件夹等)。

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

https://stackoverflow.com/questions/51640380

复制
相关文章

相似问题

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