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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

1回答

1519閲覧

CollectionViewについて

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2017/08/10 07:14

編集2022/01/12 10:55

###前提・実現したいこと
カメラロールに保存されてる写真をCollectionViewを使い、実行したいと思ってます

###現在起きている問題
現在、runしても画面が真っ白なままで、変化がありません
また、コンソールには何も書かれていません
###該当のソースコード

//![![ViewCo](ddb8b29e85a7f097dd09cbeb29089f02.png)](6ac86430604142fa0dbe9adabd689307.png)ntroller import UIKit import Photos class ViewController: UIViewController { @IBOutlet weak var collectionView: UICollectionView! var photoAssets: Array! = [PHAsset]() override func viewDidLoad() { super.viewDidLoad() setup() libraryRequestAuthorization() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } fileprivate func setup() { collectionView.dataSource = self // UICollectionViewCellのマージン等の設定 let flowLayout: UICollectionViewFlowLayout! = UICollectionViewFlowLayout() flowLayout.itemSize = CGSize(width: UIScreen.main.bounds.width / 3 - 4, height: UIScreen.main.bounds.width / 3 - 4) flowLayout.sectionInset = UIEdgeInsets(top: 8, left: 0, bottom: 0, right: 0) flowLayout.minimumInteritemSpacing = 0 flowLayout.minimumLineSpacing = 6 collectionView.collectionViewLayout = flowLayout } // カメラロールへのアクセス許可 fileprivate func libraryRequestAuthorization() { PHPhotoLibrary.requestAuthorization({ [weak self] status in guard let wself = self else { return } switch status { case .authorized: wself.getAllPhotosInfo() case .denied: wself.showDeniedAlert() case .notDetermined: print("NotDetermined") case .restricted: print("Restricted") } }) } // カメラロールから全て取得する fileprivate func getAllPhotosInfo() { let assets: PHFetchResult = PHAsset.fetchAssets(with: .image, options: nil) assets.enumerateObjects({ [weak self] (asset, index, stop) -> Void in guard let wself = self else { return } wself.photoAssets.append(asset as PHAsset) }) collectionView.reloadData() } // カメラロールへのアクセスが拒否されている場合のアラート fileprivate func showDeniedAlert() { let alert: UIAlertController = UIAlertController(title: "エラー", message: "「写真」へのアクセスが拒否されています。設定より変更してください。", preferredStyle: .alert) let cancel: UIAlertAction = UIAlertAction(title: "キャンセル", style: .cancel, handler: nil) let ok: UIAlertAction = UIAlertAction(title: "設定画面へ", style: .default, handler: { [weak self] (action) -> Void in guard let wself = self else { return } wself.transitionToSettingsApplition() }) alert.addAction(cancel) alert.addAction(ok) present(alert, animated: true, completion: nil) } fileprivate func transitionToSettingsApplition() { let url = URL(string: UIApplicationOpenSettingsURLString) if let url = url { UIApplication.shared.open(url, options: [:], completionHandler: nil) } } } extension ViewController : UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return photoAssets.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! CameraRollCollectionViewCell cell.setConfigure(assets: photoAssets[indexPath.row]) return cell } }
//CameraRollCollectionViewCell import UIKit import Photos class CameraRollCollectionViewCell: UICollectionViewCell { @IBOutlet weak var photoImageView: UIImageView! override func awakeFromNib() { super.awakeFromNib() } // 画像を表示する func setConfigure(assets: PHAsset) { let manager = PHImageManager() manager.requestImage(for: assets, targetSize: frame.size, contentMode: .aspectFill, options: nil, resultHandler: { [weak self] (image, info) in guard let wself = self, let outImage = image else { return } self?.photoImageView.image = image }) } }

###確認したこと
関連付け、 UICollectionViewCell のIdentifierはCellになっており。
また、セルのクラスも CameraRollCollectionViewCell と指定しています。また、info.plistにも書いていいます。

違っているところがあれば教えてくださると幸いです

###開発環境など
xcode8
swift3
iPhoneアプリ

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

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

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

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

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

fuzzball

2017/08/10 07:34

「コンソールには何も書かれていません」とのことですが、自分でprint文を埋め込んで、処理の流れを追って下さい。
guest

回答1

0

libraryRequestAuthorization()の.requestAuthorizationのハンドラ内はメインスレッドではありません。
UIに関する操作はメインスレッドで行って下さい。

swift

1PHPhotoLibrary.requestAuthorization({ [weak self] status in 2 //※この中はメインスレッドではない 3 guard let wself = self else { 4 return 5 } 6 DispatchQueue.main.async { //※追加 7 //※この中はメインスレッドになる 8 switch status { 9 case .authorized: 10 wself.getAllPhotosInfo() //この中でUIを触っている 11 case .denied: 12 wself.showDeniedAlert() //この中でUIを触っている 13 case .notDetermined: 14 print("NotDetermined") 15 case .restricted: 16 print("Restricted") 17 } 18 } 19})

投稿2017/08/10 08:09

fuzzball

総合スコア16731

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

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

退会済みユーザー

退会済みユーザー

2017/08/10 09:08

ご回答ありがとうございます そこを直しrunしたら、普通に動くはずですよね? しかし、現在も真っ白なままです。
fuzzball

2017/08/10 09:27 編集

アルバムに画像はありますよね? wself.photoAssets.append(asset as PHAsset) のところに print(asset) を追加して、画像を取得できているかどうか確認して下さい。
退会済みユーザー

退会済みユーザー

2017/08/10 10:23

何も表示されません、、、 UIImagePickerControllerを使って表示させた時は、画像があったのですが何かちがうのですか?
fuzzball

2017/08/10 12:07

「質問への追記・修正」にも書きましたが、print文やブレークポイントなどを使って処理の流れを追って下さい。 「何も表示されない」にしても、画像を取得出来ていないのか、そもそもそこの処理を通っていないのか、そういうことを調べて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問