问题
I cannot get this method to return YES:
- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}
I have verified that stringToWrite is coming through properly, the method just always returns NO.
Any ideas?
Here is the rest of the class:
@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:
Here is the working version of the method:
- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
[pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}
回答2:
Swift 2:
Copy a string to the general pasteboard with Swift 2:
let pasteboard = NSPasteboard.generalPasteboard()
pasteboard.declareTypes([NSPasteboardTypeString], owner: nil)
pasteboard.setString("Hello", forType: NSPasteboardTypeString)
回答3:
Apple is suggesting people move away from NSStringPboardType and use NSPasteboardTypeString instead.
回答4:
As of 10.6, the following implementation is also possible:
- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
[pasteBoard clearContents];
return [pasteBoard writeObjects:[NSArray arrayWithObject:stringToWrite]];
}
It's important to notice that #clearContents has to be called before something new can be written to the pasteboard, otherwise #writeObjects: keeps returning NO.
The new #writeObjects: methods is possible for objects that conform to the NSPasteboardWriting protocol. There's also an NSPasteboardReading Protocol, but using it wouldn't make the implementation any simpler.
回答5:
Before you copy a string on NSPasteboard it's better to clear the contents and then save.
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];
And also there are other available types for copying items on NSPasteboard. Like:
- NSPasteboardTypeString
- NSPasteboardTypePDF
- NSPasteboardTypeTIFF
- NSPasteboardTypePNG
- NSPasteboardTypeRTF
You can find more details on https://developer.apple.com/documentation/appkit/nspasteboardtype.
回答6:
Swift 4 version:
NSPasteboard.general.clearContents()
NSPasteboard.general.setString("Hello World", forType: .string)
回答7:
For the record, to copy a string to the system clipboard, you can use
NSPasteboard *pasteBoard = [NSPasteboard generalPasteboard];
[pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
[pasteBoard setString:string forType:NSStringPboardType];
回答8:
This works on Mojave 10.14.5 and does not use any deprecated APIs:
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
[pasteboard declareTypes:[NSArray arrayWithObjects:NSPasteboardTypeString, nil] owner:nil];
[pasteboard setString:@"Hello clipboard!" forType:NSPasteboardTypeString];
来源:https://stackoverflow.com/questions/598587/writing-a-string-to-nspasteboard