Domanda

Non riesco a far questo metodo per restituire SI:

- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
    return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}

Ho verificato che stringToWrite sta arrivando attraverso correttamente, il metodo restituisce appena sempre NO.

Tutte le idee?

Ecco il resto della classe:

@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

È stato utile?

Soluzione

Questa è la versione di lavoro del metodo:

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

Altri suggerimenti

Swift 2:

Copia una stringa al tavolo di montaggio generale Swift 2:

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

Apple sta suggerendo le persone si spostano lontano da NSStringPboardType e utilizzare NSPasteboardTypeString invece.

10,6, la seguente implementazione è anche possibile:

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

E 'importante notare che #clearContents deve essere chiamato prima qualcosa di nuovo può essere scritto al tavolo di montaggio, altrimenti #writeObjects:. Continua a tornare NO

I nuovi #writeObjects: metodi è possibile per gli oggetti che sono conformi al protocollo NSPasteboardWriting. C'è anche un protocollo NSPasteboardReading, ma il suo utilizzo non avrebbe l'implementazione più semplice.

Prima di copiare una stringa su NSPasteboard è meglio cancellare il contenuto e quindi salvare.

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];

E ci sono anche altri tipi disponibili per la copia di oggetti su NSPasteboard . Come:

  • NSPasteboardTypeString
  • NSPasteboardTypePDF
  • NSPasteboardTypeTIFF
  • NSPasteboardTypePNG
  • NSPasteboardTypeRTF

Si possono trovare maggiori dettagli su https://developer.apple.com/documentation/appkit/ nspasteboardtype .

Swift 4 Versione:

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

Per la cronaca, per copiare una stringa negli Appunti di sistema, è possibile utilizzare

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

Questo funziona su Mojave 10.14.5 e non usa le API deprecate:

NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
[pasteboard declareTypes:[NSArray arrayWithObjects:NSPasteboardTypeString, nil] owner:nil];
[pasteboard setString:@"Hello clipboard!" forType:NSPasteboardTypeString];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top