Xcode 7.2
Swift 2.1.1
assetURLは取れるんですが、Imageがついてきません
※訂正:「assetURLから PHAsset.fetchAssetsWithALAssetURLで取得出来ない」でした。m(_ _)m
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
if(info[UIImagePickerControllerOriginalImage] != nil){
//カメラ撮影、カメラロールなどから選択した場合はこちら
//〜省略
} else {
// フォトストリームから選択した場合はここに入る
//assetURLは取得可能
let path:NSURL = info[UIImagePickerControllerReferenceURL] as! NSURL;
// 以下の様にPHAssetとして取得しようとするとnilとなる
let fetchResult: PHFetchResult = PHAsset.fetchAssetsWithALAssetURLs([path], options: optionsForFetch)
}
}
色々と調べたり聞いたりしたものの、以下の方法で解決することにしました。
やっていることはassetUrlから識別IDだけ抜き出し。
Photos frameworkのPHFetchResultとしてはフォトストリームの写真が取得できるので、その全数をループで回して識別IDの一致をチェックする泥臭い方法。
func searchPHAsset(alURL:NSURL) -> PHAsset? {
var phAsset : PHAsset?
let str = alURL.absoluteString.characters.split("=").map(String.init)[1]
let startIndex = 0
let startOfString = str.startIndex.advancedBy(startIndex)
let endOfString = str.startIndex.advancedBy(36)
let range = Range(start:startOfString,end:endOfString)
let localIDFragment = str.substringWithRange(range)
let optionsForFetch = PHFetchOptions()
optionsForFetch.includeHiddenAssets = true
let fetchResultForPhotostream = PHAssetCollection.fetchAssetCollectionsWithType(PHAssetCollectionType.Album,subtype:PHAssetCollectionSubtype.AlbumMyPhotoStream, options: nil)
if fetchResultForPhotostream.count > 0 {
let photostream = fetchResultForPhotostream[0] as! PHAssetCollection
let fetchResultForPhotostreamAssets = PHAsset.fetchAssetsInAssetCollection(photostream, options: optionsForFetch)
if fetchResultForPhotostreamAssets.count >= 0 {
var stop : Bool = false
for var i = 0; i < fetchResultForPhotostreamAssets.count && !stop; i++ {
let phAssetBeingCompared = fetcsultForPhotostreamAssets[i] as! PHAsset
if phAssetBeingCompared.localIdentifier.rangeOfString(localIDFragment) != nil {
phAsset = phAssetBeingCompared
stop = true
}
}
return phAsset
}
}
return phAsset
}