NSMutableArray *filesTocopy = [[NSMutableArray alloc] init]; int i;for (i=1; i < [arguments count]; i++) { Nsstring* pathTofile = [arguments objectAtIndex:i]; NSURL* fileURL = [[NSURL alloc] initfileURLWithPath:pathTofile]; [filesTocopy addobject:fileURL];}NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];NSInteger changeCount = [pasteboard clearContents];BOol OK = [pasteboard writeObjects:filesTocopy];
但是,在尝试将程序复制到剪贴板的文件粘贴到Mail中的空电子邮件时进行测试时,通常该文件显示为零字节,并且控制台上显示以下错误:
11/13/13 6:27:12.173 AM Mail[627]: Failed to obtain a valID sandBox extension for item: [789514] of flavor: [public.file-url] from the pasteboard.
11/13/13 6:27:12.174 AM Mail[627]: Failed to get a sandBox extensions for itemIDentifIEr (789514). The data for the sandBox extension was NulL
然后在控制台上出现以下错误:
11/13/13 8:24:41.947 AM sandBoxd[172]: ([627]) Mail(627) deny file-read-xattr [full path of file]
奇怪的是,如果我从Finder复制文件,那么每次粘贴都没有错误.换句话说,Finder以某种方式将文件复制到剪贴板,其信息与我的方式不同.为了验证这一点,我做了一个简单的AppleScript来返回剪贴板信息.将文件复制到剪贴板后返回以下内容:
{{«class furl»,115},{«class utf8»,{«class ut16»,232},{string,{Unicode text,230}}
使用Finder将同一文件复制到剪贴板后,Applescript将返回以下内容:
{{«class furl»,33},{«class icns»,795020},112},55},{«class 8BPS»,1630436},{«class BMP »,4194358},{«class TPIC»,1059291},{TIFF picture,4197954},{«class PNGf»,392648},{«class jp2 »,213480},{GIF picture,121307},{JPEG picture,116181},110},55}}
因此,Finder会在剪贴板上提供有关该文件的更多信息以及不同的信息.例如,furl类具有不同的长度.这些额外的信息显然是什么原因导致Mail成功通过从Finder复制的文件,同时它粘贴了我的程序复制的文件时出错.
当我将文件放在剪贴板上或者我应该向粘贴添加哪些额外信息时,我丢失了哪些信息的线索?我猜测Finder不只是粘贴一个NSURL数组,而是一个包含其他文件信息的字典键数组.它似乎也创造了与我不同的furl类.我花了很多时间倾注文档,我坚持这个.
解决方法 我相信我发现了问题.似乎命令行应用程序复制到粘贴板时,存在与未传输的沙盒相关的权限.复制的文件可以很好地粘贴到任何非沙盒应用程序中,但不能粘贴到沙盒应用程序中.在这种情况下的解决方案是只创建一个基于Cocoa的常规.app程序.我仍然不确定如何,但它以正确传输权限的方式复制文件,并且可以将文件粘贴到非沙盒和沙盒应用程序中. 总结以上是内存溢出为你收集整理的objective-c – 复制到剪贴板的文件为空,粘贴时“丢失沙箱扩展”全部内容,希望文章能够帮你解决objective-c – 复制到剪贴板的文件为空,粘贴时“丢失沙箱扩展”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)