iPhone-本地文件中的NSData';s网址

iPhone-本地文件中的NSData';s网址,iphone,nsdata,nsurl,Iphone,Nsdata,Nsurl,我有一个NSURL对象,它为我提供本地文件(在文档文件夹中)的路径。我想用这个文件的内容填充一个NSData对象。尝试使用dataWithContentsOfURL:,但失败。我知道该文件存在,因为iPhoneSDK返回路径 有人能告诉我如何从本地文件的URL获取NSData对象吗 谢谢。//给定了一些文件路径URL:NSURL*pathURL //注意:[pathURL isFileURL]必须返回YES NSString*path=[pathURL路径]; NSData*data=[[NSF

我有一个
NSURL
对象,它为我提供本地文件(在文档文件夹中)的路径。我想用这个文件的内容填充一个
NSData
对象。尝试使用
dataWithContentsOfURL:
,但失败。我知道该文件存在,因为iPhone
SDK
返回路径

有人能告诉我如何从本地文件的
URL
获取
NSData
对象吗

谢谢。

//给定了一些文件路径URL:NSURL*pathURL
//注意:[pathURL isFileURL]必须返回YES
NSString*path=[pathURL路径];
NSData*data=[[NSFileManager defaultManager]contentsAtPath:path];
Swift代码:

let data=FileManager.default.contents(atPath:path)

要完成这项工作,您只需执行以下操作:

NSURL *imgPath = [[NSBundle mainBundle] URLForResource:@"search" withExtension:@"png"];
NSString*stringPath = [imgPath absoluteString]; //this is correct  

//you can again use it in NSURL eg if you have async loading images and your mechanism 
//uses only url like mine (but sometimes i need local files to load)
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringPath]];
UIImage *ready = [[[UIImage alloc] initWithData:data] autorelease];

确保您的本地URL以“file://”开头。 那么你只需要这样做:

 NSData *fileData = [NSData dataWithContentsOfFile:fileURL.path];

对于swift3,我发现下面URL的答案很有用

(在使用phonegap插件拍摄图像后,我获得了以下路径。)

file:///var/mobile/Containers/Data/Application/B64B06DE-7976-45CF-9BE2-661F0F309A06/tmp/abcded.jpg )

如果让videoURL=URL(string:urlString),让videodata=try?数据(内容:videoURL){ //在这里添加Alamofire的代码
}

什么是“但它失败了”意思?意思是它在这一点上冻结了!给出了一个例外。我正在尝试访问视频数据,我们从UIImagePickerController获取的URL显示您正在尝试传递的对象不是NURL。你是如何获得文件URL的,你确定是URL而不是NSString吗?@AliKhaki:请不要做琐碎的编辑,审查队列中需要两个人来检查你的更改。如果你编辑一个问题来改进它,可以随意删除无用的东西,比如“谢谢”,但不要仅仅为了这个而编辑这个问题。谢谢contentsOfFile采用带有文件路径的NSString。我得到了一个NSURL对象。我不确定,但是使用defaultManager而不是alloc,init可能会导致线程问题。在线程注意事项下,可以这样说:“可以从多个线程安全地调用共享NSFileManager对象的方法。”他们注意到的唯一例外是,如果您打算处理来自文件管理器操作的委托回调;我认为这不适用于这里。请注意,路径是文件的“完整路径”,您可以在XCodeurl的文件检查器下找到它,它总是作为资产返回-library://asset/asset.MOV?id=095AA9E9-A4F5-4035-9A21-3CFF04F45C70&ext=MOV@ahbou仅对资产(照片和视频)有效。OP询问文档文件夹中的一个文件当我从资产库的选定url创建数据对象时,它给了我nil@ahbou资产仅由资产库或Photos.framework处理。要检索资产,需要调用asset.assetForURL{}搜索此方法或提出新问题,因为这是一个单独的主题。
guard let data = FileManager.default.contents(atPath: path) else
    { ...