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

¿Fue útil?

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];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top