Al escribir una cadena de NSPasteBoard
-
11-09-2019 - |
Pregunta
No puedo conseguir este método para devolver SÍ:
- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}
He comprobado que stringToWrite está llegando a través correctamente, el método que se acaba siempre devuelve NO.
¿Alguna idea?
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];
}
@end
Solución
Esta es 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];
}
Otros consejos
Swift 2:
Copiar una cadena a la mesa de trabajo en general con Swift 2:
let pasteboard = NSPasteboard.generalPasteboard()
pasteboard.declareTypes([NSPasteboardTypeString], owner: nil)
pasteboard.setString("Hello", forType: NSPasteboardTypeString)
Apple está sugiriendo personas se alejan de NSStringPboardType y utilizan NSPasteboardTypeString lugar.
A partir de 10,6, la siguiente aplicación también es posible:
- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
[pasteBoard clearContents];
return [pasteBoard writeObjects:[NSArray arrayWithObject:stringToWrite]];
}
Es importante notar que #clearContents tiene que ser llamado antes de que algo nuevo se puede escribir en la mesa de trabajo, de lo contrario #writeObjects:. Sigue reapareciendo NO
Las nuevas #writeObjects: métodos es posible que los objetos que cumplen con el protocolo NSPasteboardWriting. También hay un Protocolo NSPasteboardReading, pero utilizando no haría que la aplicación más simple.
Antes de copiar una cadena en NSPasteboard que es mejor para 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)
Objetivo-C
// 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 . Como:
- NSPasteboardTypeString
- NSPasteboardTypePDF
- NSPasteboardTypeTIFF
- NSPasteboardTypePNG
- NSPasteboardTypeRTF
Puede encontrar más detalles sobre https://developer.apple.com/documentation/appkit/ nspasteboardtype .
Swift 4 version:
NSPasteboard.general.clearContents()
NSPasteboard.general.setString("Hello World", forType: .string)
Para el registro, para copiar una cadena en el portapapeles del sistema, puede utilizar
NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard];
[pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
[pasteBoard setString:string forType:NSStringPboardType];
Esto funciona en Mojave 10.14.5 y no utiliza ninguna API en desuso:
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
[pasteboard declareTypes:[NSArray arrayWithObjects:NSPasteboardTypeString, nil] owner:nil];
[pasteboard setString:@"Hello clipboard!" forType:NSPasteboardTypeString];