Запись строки в NSPasteBoard - PullRequest
       17

Запись строки в NSPasteBoard

21 голосов
/ 28 февраля 2009

Я не могу заставить этот метод вернуть YES:

- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
    return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}

Я убедился, что stringToWrite проходит правильно, метод просто всегда возвращает NO.

Есть идеи?

Вот остальные классы:

@interface ClipBoard : NSObject {
    NSPasteboard *pasteBoard;
}

- (BOOL) writeToPasteBoard:(NSString *)stringToWrite;
- (NSString *) readFromPasteBoard;
@end

@implementation ClipBoard
- (id) init
{
    [super init];
    pasteBoard = [NSPasteboard generalPasteboard];
    return self;
}

- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
    return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}

- (NSString *) readFromPasteBoard
{
    return [pasteBoard stringForType:NSStringPboardType];
}

@ конец

Ответы [ 7 ]

32 голосов
/ 28 февраля 2009

Вот рабочая версия метода:

- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
    [pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
    return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}
17 голосов
/ 20 января 2016

Swift 2:

Скопируйте строку в общий монтажный стол с помощью Swift 2:

let pasteboard = NSPasteboard.generalPasteboard()
pasteboard.declareTypes([NSPasteboardTypeString], owner: nil)
pasteboard.setString("Hello", forType: NSPasteboardTypeString)
14 голосов
/ 21 марта 2012

Apple предлагает людям отойти от NSStringPboardType и использовать вместо него NSPasteboardTypeString.

8 голосов
/ 10 апреля 2012

Начиная с 10.6, также возможна следующая реализация:

- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
    [pasteBoard clearContents];
    return [pasteBoard writeObjects:[NSArray arrayWithObject:stringToWrite]];
}

Важно отметить, что #clearContents должен вызываться перед тем, как что-то новое может быть записано в монтажную панель, в противном случае #writeObjects: продолжает возвращать NO.

Новые #writeObjects: методы возможны для объектов, которые соответствуют протоколу NSPasteboardWriting. Существует также протокол NSPasteboardReading, но его использование не упростит реализацию.

6 голосов
/ 14 февраля 2018

Прежде чем скопировать строку на NSPasteboard , лучше очистить содержимое и затем сохранить.

Swift 4

    // Set string
    NSPasteboard.general.clearContents()
    NSPasteboard.general.setString("I copied a string", forType: .string)
    // Read copied string
    NSPasteboard.general.string(forType: .string)

Objective-C

    // Set string
    [[NSPasteboard generalPasteboard] clearContents];
    [[NSPasteboard generalPasteboard] setString:@"I copied a string" forType:NSPasteboardTypeString];
    // Read string
    [[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString];

А также есть другие доступные типы для копирования элементов на NSPasteboard . Как:

  • NSPasteboardTypeString
  • NSPasteboardTypePDF
  • NSPasteboardTypeTIFF
  • NSPasteboardTypePNG
  • NSPasteboardTypeRTF

Вы можете найти более подробную информацию о https://developer.apple.com/documentation/appkit/nspasteboardtype.

1 голос
/ 17 октября 2017

Swift 4 версия:

NSPasteboard.general.clearContents()
NSPasteboard.general.setString("Hello World", forType: .string)
0 голосов
/ 10 сентября 2015

Для записи, чтобы скопировать строку в системный буфер обмена, вы можете использовать

NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard];
[pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
[pasteBoard setString:string forType:NSStringPboardType];
...