2017-02-02 10 views
1

사용자가 고른 갤러리의 이미지가 포함 된 tableView을 만든 다음, imagePath을 선택하여 UIImageView에 배치합니다.UIImage imageWithContentsOfFile : 실제 장치에서 작동하지 않습니다.

NSString *imgPath = @"/var/mobile/Media/DCIM/105APPLE/IMG_5903.JPG";//Hardcoded path just for test, image actually exists on iOS device 

self.imgViewContainer.image = [UIImage imageWithContentsOfFile: imgPath]; 

시뮬레이터에서 작동이 코드를 :

은 내가 사용하는 UIImageView에 를 아이폰 OS 갤러리 이미지를 설정합니다.

실제 장치에서 테스트 한 결과 위의 코드를 실행 한 후에 UIImageView이 비어있는 것으로 나타났습니다.

실제 장치를 사용하여이를 수행 할 수있는 방법이 있습니까?

+0

실제 iOS 기기에서 경로가 유효하다고 생각하는 이유는 무엇입니까? '@ '로 시작하는 이유는 무엇입니까? – rmaddy

+0

죄송합니다! 그것은 문자열의 @, 편집 된 질문 ... 그 경로를 테스트 용으로 사용하고 있습니다. 이미지는 존재합니다. – CGR

+2

1. 실제 iOS 장치에이 경로가 실제로 있습니까? 2. 앱은 샌드 박스이므로 실제 기기에서 자체 샌드 박스 외부의 파일을 읽을 수 없습니다. – rmaddy

답변

3

앱 샌드 박스 때문에 앱에 /var/mobile/Media (또는 실제로는 /var/의 하위 디렉토리)의 내용을 볼 수있는 권한이 없습니다.

do { 
    let fileList = try FileManager.default.contentsOfDirectory(atPath: "/var/mobile/Media/DCIM/") 
} catch { 
    print(error) 
} 

contentsOfDirectory(atPath:) 이러한 세부 사항에 오류가 발생 : 아래의 코드는 고려

Error Domain=NSCocoaErrorDomain Code=257 "The file “DCIM” couldn’t be opened because you don’t have permission to view it." UserInfo={NSFilePath=/var/mobile/Media/DCIM/, NSUserStringVariant=(
    Folder 
), NSUnderlyingError=0x170045700 {Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted"}} 

이 예는 스위프트에 있지만 해당 목표 - C 코드가 같은 오류가 발생했을 .

루트 사용자로 응용 프로그램을 실행하는 jailbroken 장치를 사용하지 않는 한이 방법은 없습니다. 사용자에게 이미지를 요청하려면 UIImagePickerController을 사용하십시오.

관련 문제