質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

2099閲覧

UIImagePickerControllerでマイフォトストリーム選択した場合の画像取得方法

Jan

総合スコア14

iOS 9

iOS 9は、アップル社のモバイルOSであるiOSシリーズのバージョン。特徴として検索機能の強化、Siriの機能改良、iPad向けマルチタスクなどがあります。マルチウィンドウ機能をサポートし、iPad向けマルチタスクもサポートされています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

1クリップ

投稿2016/01/18 13:12

UIImagePickerContorollerで画像選択後、デリゲート内で以下のような処理を記述します。

lang

1func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 2 3 if(info[UIImagePickerControllerOriginalImage] != nil){ 4 //カメラ撮影、カメラロールなどから選択した場合はこちら 5 //〜省略 6 } else { 7 // フォトストリームから選択した場合はここに入る 8 //assetURLは取得可能 9 let path:NSURL = info[UIImagePickerControllerReferenceURL] as! NSURL; 10 // 以下の様にPHAssetとして取得しようとするとnilとなる 11 let fetchResult: PHFetchResult = PHAsset.fetchAssetsWithALAssetURLs([path], options: optionsForFetch) 12 } 13}

フォトストリームから選択後、fetchResultがnilとなり画像を取得できないので困っています。

マイフォトストリームは端末内の画像ではないので扱いが異なるのでしょうか。
PHAssetまたはUIImageなどの形でイメージを取得したいです。
どうすれば取得できるでしょうか?

ご存知のかたご教授をいただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以前、AssetsLibraryを使っていた時に同様の問題に遭遇したことがあり、
http://stackoverflow.com/questions/26480526/alassetslibrary-assetforurl-always-returning-nil-for-photos-in-my-photo-stream
の質問とその回答のサンプルコードを参考にして解決したことがあります。

私はPhotos Frameworkは本格的に使ったことはないのですが、この記事の回答の1つにPhotos Frameworkを使った場合のサンプルコードがありますので、それを実装すればうまくいくかもしれません。

投稿2016/01/18 15:05

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Jan

2016/01/19 14:29 編集

ご回答ありがとうございます。 教えていただいたサイトのコードを少し変え、swift2でも動くように以下のように修正し、無事に取得できました。助かりました。 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 = fetchResultForPhotostreamAssets[i] as! PHAsset if phAssetBeingCompared.localIdentifier.rangeOfString(localIDFragment) != nil { phAsset = phAssetBeingCompared stop = true } } return phAsset } } return phAsset }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問