Подтвердить что ты не робот

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

Я не могу вернуть этот метод 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];
}

@end

4b9b3361

Ответ 1

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

- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
    [pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
    return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}

Ответ 2

Swift 2:

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

let pasteboard = NSPasteboard.generalPasteboard()
pasteboard.declareTypes([NSPasteboardTypeString], owner: nil)
pasteboard.setString("Hello", forType: NSPasteboardTypeString)

Ответ 3

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

Ответ 4

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

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

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

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

Ответ 5

Перед тем, как скопировать строку на 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.

Ответ 6

Версия Swift 4:

NSPasteboard.general.clearContents()
NSPasteboard.general.setString("Hello World", forType: .string)

Ответ 7

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

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

Ответ 8

Это работает на Mojave 10.14.5 и не использует устаревшие API:

NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
[pasteboard declareTypes:[NSArray arrayWithObjects:NSPasteboardTypeString, nil] owner:nil];
[pasteboard setString:@"Hello clipboard!" forType:NSPasteboardTypeString];