cocoa - Escribiendo una cadena a NSPasteBoard
xcode (7)
No puedo obtener este método para devolver SÍ:
- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}
He verificado que stringToWrite se está procesando correctamente, el método siempre devuelve NO.
¿Algunas ideas?
Aquí está el resto de la clase:
@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];
}
@fin
Swift 2:
Copia una cadena al pegado general con Swift 2:
let pasteboard = NSPasteboard.generalPasteboard()
pasteboard.declareTypes([NSPasteboardTypeString], owner: nil)
pasteboard.setString("Hello", forType: NSPasteboardTypeString)
A partir de 10.6, la siguiente implementación también es posible:
- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
[pasteBoard clearContents];
return [pasteBoard writeObjects:[NSArray arrayWithObject:stringToWrite]];
}
Es importante tener en cuenta que se debe llamar a #clearContents antes de poder escribir algo nuevo en el área de trabajo, de lo contrario, #writeObjects: sigue devolviendo NO.
El nuevo método #writeObjects: es posible para objetos que cumplen con el protocolo NSPasteboardWriting. También hay un protocolo de lectura NSPasteboard, pero su uso no haría la implementación más sencilla.
Antes de copiar una cadena en NSPasteboard , es mejor borrar el contenido y luego guardar.
Swift 4
// Set string
NSPasteboard.general.clearContents()
NSPasteboard.general.setString("I copied a string", forType: .string)
// Read copied string
NSPasteboard.general.string(forType: .string)
C objetivo
// Set string
[[NSPasteboard generalPasteboard] clearContents];
[[NSPasteboard generalPasteboard] setString:@"I copied a string" forType:NSPasteboardTypeString];
// Read string
[[NSPasteboard generalPasteboard] stringForType:NSPasteboardTypeString];
Y también hay otros tipos disponibles para copiar elementos en NSPasteboard . Me gusta:
- NSPasteboardTypeString
- NSPasteboardTypePDF
- NSPasteboardTypeTIFF
- NSPasteboardTypePNG
- NSPasteboardTypeRTF
Puede encontrar más detalles en https://developer.apple.com/documentation/appkit/nspasteboardtype .
Apple sugiere que la gente se aleje de NSStringPboardType y, en su lugar, utilice NSPasteboardTypeString.
Aquí está la versión de trabajo del método:
- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
[pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}
Para el registro, para copiar una cadena en el portapapeles del sistema, puede usar
NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard];
[pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
[pasteBoard setString:string forType:NSStringPboardType];
Versión Swift 4:
NSPasteboard.general.clearContents()
NSPasteboard.general.setString("Hello World", forType: .string)