추출하기라는 표현이 적당한지 모르겠지만,
ALAsset처럼 URL을 뽑아내어 배열에 담고 싶었다.
비슷한 작업을 PhotoKit으로 대체하는 부분이라서 그 부분이 필요했다고 하는게 적당하겠다.
우선 문서를 찾아보니 PHAsset 클래스에 "fetchAssetsWithLocalIdentifiers"라는 메소드가 보였다.
첫 번째 파라메터로는 NSArray 타입의 identifier을 전달하는 것인데, 이 identifier를 찾을 수가 없었다.
찾다 찾다가 PHAsset 클래스가 PHObject 클래스를 상속하고 있는데, PHObject에 localIdentifier 프로퍼티가 존재한다.
"A unique string that persistently identifies the object. (read-only)" 와 같이 설명되어 있다.
PHCollection도 PHObject 클래스를 상속받고 있으니,
앨범 이름의 identifier가 필요하면 PHAsset과 마찬가지로 localIdentifier 프로퍼티를 참조하면 된다.
__block NSString *localIdentifier = nil; // 카메라 롤 앨범을 읽어온다. PHFetchResult *smartFolderLists = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary options:nil]; PHAssetCollection *smartFolderAssetCollection = (PHAssetCollection *)[smartFolderLists firstObject]; // 카메라 롤에 있는 사진을 가져온다. PHFetchResult *assets = [PHAsset fetchAssetsInAssetCollection:smartFolderAssetCollection options:nil]; [assets enumerateObjectsUsingBlock : ^(PHAsset *asset, NSUInteger idx, BOOL *stop) { // PHAsset에서 localIdentifier 프로퍼티를 읽는다. localIdentifier = asset.localIdentifier; *stop = YES; }];
위의 소스를 활용해 localIdentifier를 메모리에 저장했다가 필요한 부분에서 다음 소스를 활용하여 사용한다면
AssetsLibrary처럼 URL을 활용하여 사진 오브젝트를 얻을 수 있다. AssetsLibrary의 URL이 identifier로 바뀐것이라고 생각하자.
PHFetchResult *asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[@"6E5438ED-9A8C-4ED0-9DEA-AB2D8F8A9360/L0/001"] options:nil];
소스 상에 "6E5438ED-9A8C-4ED0-9DEA-AB2D8F8A9360/L0/001"는 시물레이터 추출한 localIdentifier를 직접 넣었다.
'Mobile Application > iOS' 카테고리의 다른 글
[Realm] Realm으로 Object를 만들 때 주의할 점. (0) | 2015.06.12 |
---|---|
[XCode] 버전별 dmg 리스트 업 (0) | 2015.06.09 |
[AssetLibrary] iOS 8.1 이상에서 포토 스트림 지원하기. (0) | 2015.03.04 |
[PhotoKit] 카메라 롤과 일반 앨범 가져오기. (0) | 2015.03.01 |
[AssetLibrary] 원본 이미지 가져오기. (0) | 2015.03.01 |