Получить объект буфера обмена из NSPasteboard mac

Мне нужно получить объект NSPasteboard и сохранить его где-нибудь, чтобы потом вернуть его в буфер обмена. Я делаю это только с атрибутом text прямо сейчас. Я хочу знать, как сделать это с любым объектом (пример: скопировать файл). Вот мой код для получения текста и его возврата:

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];
}

1 ответ

Решение

Самый простой способ, который я нашел, - это получить массив всех NSPasteboardItems:

- (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;
}

с этой страницы: выделение NSPasteboardItem из картона

Затем вы можете записать обратно в монтажную панель после манипуляций с этим буфером: [pasteboard writeObjects:arrayPasteboardItems];

Это вернет любой ранее скопированный объект (даже файлы, папки и т. Д.).

Другие вопросы по тегам