Запись строки в 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
Ответы
Ответ 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];