2009-10-03 2 views
73

NSURL 개체가 있습니다 (문서 폴더에 있음). NSData 개체를이 파일의 내용으로 채 웁니다. dataWithContentsOfURL:을 사용해 보았지만 실패했습니다. iPhone SDK이 경로를 반환하기 때문에 파일이 존재한다는 것을 알고 있습니다.iPhone - 로컬 파일의 URL에있는 NSData

로컬 파일 에서 NSData 개체를 가져 오는 방법을 알려줄 수 있습니까?

감사합니다.

+0

"그러나 실패"는 무엇을 의미합니까? – Marco

+0

이 시점에서 얼어 버린다는 뜻입니다! 예외를줍니다. UIImagePickerController에서 가져온 URL의 비디오 데이터에 액세스하려고합니다. – lostInTransit

+0

NURL이 아닌 객체를 전달하려고합니다. 어떻게 파일 URL을 얻고 있습니까, NSString이 아닌 URL이 맞습니까? – Marco

답변

146
// Given some file path URL: NSURL *pathURL 
// Note: [pathURL isFileURL] must return YES 
NSString *path = [pathURL path]; 
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];
+1

contentsOfFile은 파일 경로가있는 NSString을 사용합니다. 나는 NSURL 객체를 얻고있다. – lostInTransit

+0

alloc 대신 defaultManager를 사용하면 init이 스레드 문제를 일으킬 수 있습니다. – carlossless

+2

[NSFileManager docs] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html)에서는 스레딩 고려 사항에 대해 다음과 같이 말합니다. 공유 된 NSFileManager 객체의 메소드는 여러 스레드에서 안전하게 호출 할 수 있습니다. " 파일 관리자의 작업에서 위임 콜백을 처리하려는 경우에만주의해야합니다. 나는 그것이 여기에 적용된다고 믿지 않는다. – Tim

24

방금해야 할이 작품으로 활용하려면 다음

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

것은 해당 지역의 URL로 시작해야합니다 "파일 : //" 다음 방금이 작업을 수행해야합니다 :

를 swift3를 들어
NSData *fileData = [NSData dataWithContentsOfFile:fileURL.path]; 
+0

의 파일 관리자에서 찾을 수 있습니다. url은 항상 assets-library : //asset/asset.MOV? id = 095AA9E9-A4F5-4035- 9A21-3CFF04F45C70 & ext = MOV @ahbou –

+0

자산 (사진 및 동영상)에만 유효합니다. OP는 문서 폴더 – ahbou

+0

에서 파일에 대한 askign입니다. 내가 선택한 URL에서 데이터 객체를 만들 때 asset_library가 표시됩니다. –

0

내가 도움이 다음 URL에서 답을 찾을

: 14,은 (///var/mobile/Containers/Data/Application/B64B06DE-7976-45CF-9BE2-661F0F309A06/tmp/abcded.jpg 나는 폰갭 플러그인을

파일을 사용하여 이미지를 캡처 한 후, 다음 경로를 얻고 있었다)

https://stackoverflow.com/a/41043447/6383908

경우에서는 videoURL = URL하자 (문자열 : URLString는이), Videodata를이 = 해보자? 데이터 (contentsOf : videoURL) { // 여기에 Alamofire 코드 추가 }