2014-11-21 1 views
0

어쨌든 "PHImageFileURLKey"에서 반환 된 경로를 사용하여 사진 라이브러리에 들어가서 이미지를 검색 할 수 있습니까? 반환PhotoKit iOS8 - "PHImageFileURLKey"를 사용하여 이미지 검색

경로는이 형식으로되어 있습니다 :

"file:///var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG" 

내 계획은 데이터베이스에이 경로를 저장하고 나는 그것을 다시 얻을 필요가있을 때 이미지를 가져 오기 위해 그것을 사용하는 것입니다.

도움을 주시면 감사하겠습니다. 고맙습니다!

답변

8

URL에서 사진 키트 자산을 검색하는 방법이 잘못되었다고 생각합니다.

저장합니다 localIdentifier : 여기

내가 (당신이 PHAsset에 액세스 할 수 랬) 할 것 인 것이다

PHAsset *asset = /*Your asset */ 
NSString *localIdentifier = asset.localIdentifier; 

//Now save this local identifier, or an array of them 

가 그들을 검색하는 시간이 당신은 단순히 수행

PHFetchResult *savedAssets = [PHAsset fetchAssetsWithLocalIdentifiers:savedLocalIdentifiers options:nil]; 
[savedAssets enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) { 
    //this gets called for every asset from its localIdentifier you saved 
}]; 

"PHImageFileURLKey"에 대한 액세스 권한 만있는 경우이 대답을 무시하십시오.

2

이 내용은 설명되어 있지 않으므로 님께서는 해당 URL을 프로토 타입 응용 프로그램 이상으로 사용하지 말라고 강력히 권합니다. 즉이 작동하는 것처럼 않습니다 말했다

dispatch_queue_t queue = dispatch_queue_create("photoLoadQueue", 0); 
dispatch_async(queue, ^{ 
    NSURL *privateUrl = [NSURL URLWithString:@"file:///var/mobile/Media/DCIM/102APPLE/IMG_2607.JPG"; 
    NSData *imageData = [NSData dataWithContentsOfURL:privateUrl]; 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     self.imageView.image = [UIImage imageWithData:imageData]; 
    }); 
}); 

는 당연히 당신이 당신의 전화를위한 유효 하나를 사용하여 URL을 시작하는 데 사용되는 문자열을 교체해야합니다.

프레임 워크를 사용하는 방법과는 다른 문제 일 수 있습니다. 이 같은 absoluteUrls를 저장하는 경우 데이터베이스가 신속하게 죽은 URL을 전체 될 것입니다, 그래서

  1. 시뮬레이터에서 실행 루트 경로가 정기적으로 응용 프로그램의 출시 사이에 변경 : 여기에 내 머리 위로 떨어져 일부입니다. 이 말은 가장 불편할 것입니다.
  2. 실제 기기에서는 이미지의 URL이 변경 될 수 있습니다. 제어 할 권한이 없으며 변경 한 후에는 사용자가 앱을 다시 선택하도록하여 앱의 오류가 발생합니다.
  3. 사진이 나온 PHAsset의 변경 사항을 알지 못할 것입니다.
  4. 사진 액세스에 대한 사용자 권한을 우회하는 것일 수 있습니다. 앱에 사진 액세스 권한이 취소되면 어떻게됩니까? 그러나 나중에 사용하기 위해 사진을 저장하는 방법이 많은 문제 일 수 있습니다.
  5. 파일을 제어하지 않습니다. 사용자가 파일을 삭제하면 어떻게됩니까? 내가 당신이라면

, 나는 PHImageManager requestImageForAsset: targetSize: contentMode: options: resultHandler:를 사용하여 사진 프레임 워크에서 제대로 이미지를 검색 할 것이고, 당신이 그것으로 어떻게하든위한 합리적인 해상도, 앱의 디렉토리에있는 파일에 저장합니다. 여전히 자산 변경은 없지만 좋은 해결책입니다.

애셋을 저장하고 실제로 필요할 때만 이미지를 요청하려는 경우 transient asset collections을 조사해 볼 가치가 있습니다. 필자는 애셋을 사용하지 않았기 때문에 유용하지 않을 수도 있습니다.

+1

자세한 답변을 보내 주셔서 감사합니다. 당신이 계획 한 잠재적 인 문제를 읽은 후에, 나는 그 접근법에 반대하기로 결정했다. 대신 PHObject에서 "LocalIdentifier"속성을 사용하여 이미지를 고유하게 식별하고 라이브러리에서 가져옵니다. fetchAssetsWithLocalIdentifiers : 메서드를 사용하여 다시 가져올 수있었습니다. – pnavk

+1

고마워, 나는 그것을 보지 못했고, 그것은 내 애플 리케이션도 개선하자! 나는 그렇게 사랑한다. –

+0

귀하의 코드는 '운영이 허용되지 않음'오류를 발생시킵니다. – Mojo66