由于使用粘贴板,我们的应用程序多次收到崩溃。在这种情况下,当我尝试使用系统笔记粘贴内容时,系统笔记也会被屏蔽。所以我写了一个程序尝试读取粘贴板,但是当我使用[UIPasteboard generalPasteboard]时它也会崩溃。
我确定这个严重的错误是苹果的错误,如果使用 UIPasteboard 类,在这种情况下启动时所有应用程序都会崩溃。当我重新启动手机时,就可以了。我已经向苹果报告了这个问题,但没有回复,非常失望。
Date/Time: 2018-12-19 11:37:49.4053 +0800
Launch Time: 2018-12-19 11:37:29.3603 +0800
OS Version: iPhone OS 12.1 (16B92)
Baseband Version: 3.11.00
Report Version: 104
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace SPRINGBOARD, Code 0x8badf00d
Termination Description: SPRINGBOARD, scene-create watchdog transgression: com.xxxxx.xxxx exhausted real (wall clock) time allowance of 19.86 seconds | ProcessVisibility: Background | ProcessState: Running | WatchdogEvent: scene-create | WatchdogVisibility: Foreground | WatchdogCPUStatistics: ( | "Elapsed total CPU time (seconds): …Run Code Online (Sandbox Code Playgroud) 我想在剪贴板中复制文件路径,以便它们可以作为字符串在文本编辑器中复制,但我希望它们也可供Finder复制文件.
我编写了符合Snow Leopard准则的下面显示的代码(例如,在复制文件URL时使用writeObjects)
NSString* path1 = @"/Users/dave/trash/mas.sh";
NSString* path2 = @"/Users/dave/trash/books.xml";
NSURL* url1 = [NSURL fileURLWithPath:path1 isDirectory:NO];
NSURL* url2 = [NSURL fileURLWithPath:path2 isDirectory:NO];
NSArray* paths = [NSArray arrayWithObjects:path1, path2, nil];
NSString* pathPerLine = [paths componentsJoinedByString:@"\n"];
// Put strings on top otherwise paster app receives the url (only the first)
// Urls will be used by Finder for files operations (copy, move)
NSArray* urls = [NSArray arrayWithObjects:pathPerLine, url1, url2, nil];
NSPasteboard* pasteboard = [NSPasteboard generalPasteboard];
[pasteboard clearContents];
[pasteboard writeObjects:urls];
Run Code Online (Sandbox Code Playgroud)
但是在一些编辑器(如XCode)上也会粘贴网址,如下所示(Finder正确使用网址进行复制/移动)
/Users/dave/trash/mas.sh …Run Code Online (Sandbox Code Playgroud) iPhone有剪贴板API吗?似乎可以调用API函数将文本设置为粘贴板,其他应用程序可以访问它,但有人可以验证这是正确的吗?
谢谢.
我想从我的tableview中拖出一行并将其放入Mac OS X 10.6中的任何其他NSTextField中,并删除一串文本.
拖放已经在我的应用程序中工作(在NSTableView和NSBrowser之间),但我没有成功将任何数据放在粘贴板上,除了源应用程序之外的应用程序可以接受.
这是我尝试过的代码,当我进入其他一些NSTextField时,我认为这样就足以让"hello"这个词被"粘贴"了:
-(BOOL) tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard {
[pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
[pboard setString:@"hello" forType:NSStringPboardType];
return YES;
Run Code Online (Sandbox Code Playgroud)
}
// -
我从来没有得到光标,告诉我下降将被接受,它只是不起作用.
以上都没有奏效.我认为我的概念是正确的:"编码数据,告诉粘贴板你有什么,然后给它数据",但由于其他应用程序无法识别它,我怀疑我没有告诉粘贴板正确的数据类型.
我哪里错了?
谢谢,伍迪
我可以将一个图像复制到粘贴板,如下所示:
UIPasteboard *pasteboard;
pasteboard = [UIPasteboard generalPasteboard];
UIImage *image;
[pasteboard setImage:image];
Run Code Online (Sandbox Code Playgroud)
如何将两个或三个图像复制到粘贴板?
我在 Swift 3 及更早版本中都使用了这一切,但是在 Swift 4 中,无论我使用什么变体,此代码都会将文本输出为 URL。如果我输入“这是我的示例文本”,粘贴剪贴板后的输出将是“This%20is%20my%20sample%20text”。我试过 KuTTypeFileURL 但这似乎也没有任何区别。我在这里缺少什么?我看过有关 Apple 如何更改 Pboards 和其他沙盒问题的帖子和讨论,但我似乎根本无法弄清楚这一点。
原始代码在 swift 3 及更早版本中有效
private func copyToClipBoard(textToCopy: String) {
let pasteBoard = NSPasteboard.general()
pasteBoard.clearContents()
pasteBoard.setString(textToCopy, forType: NSStringPboardType)
}
Run Code Online (Sandbox Code Playgroud)
这给出了 'NSStringPboardType' 在 Swift 中不可用的错误:使用 'PasteboardType.string'
在网上搜索后,我遇到了这些描述相同问题的帖子,解决方法是使用 kuTTypeUrl 作为字符串
在这里找到 stackoverflow.com/questions/44537356/... 和这里 forums.developer.apple.com/thread/79144
当我以这种方式尝试它时,它只是在我只需要一个字符串时输出为一个 URL。
@IBOutlet weak var nameTextField: NSTextField!
@IBAction func nameCopy(_ sender: Any) {
copyToClipBoard(textToCopy: nameTextField.stringValue)
}
let NSStringPboardType = NSPasteboard.PasteboardType(kUTTypeURL as String)
private func copyToClipBoard(textToCopy: String) {
let pasteBoard = NSPasteboard.general
pasteBoard.clearContents()
pasteBoard.setString(textToCopy, forType: NSStringPboardType) …Run Code Online (Sandbox Code Playgroud) pasteboard ×6
clipboard ×3
cocoa ×2
ios ×2
api ×1
copy ×1
image ×1
iphone ×1
nspasteboard ×1
objective-c ×1
swift ×1
watchdog ×1
xpc ×1