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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Collections API

Collections APIは開発者に複数のクラスやインターフェイスを供給し、多くのオブジェクトを扱いやすくします。

Swift

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

Q&A

解決済

1回答

700閲覧

Swift collectionview prefetchItemsAtメソッドが呼び出されない

mt115jp

総合スコア5

Collections API

Collections APIは開発者に複数のクラスやインターフェイスを供給し、多くのオブジェクトを扱いやすくします。

Swift

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

0グッド

1クリップ

投稿2020/03/09 02:55

質問内容:
コレクションビューのprefetchを使って先読みするような
プログラムを書きたいのですが、そもそもprefetchItemsAtが
なぜかメソッドが呼ばれません
他にも何か記載が必要なんでしょうか、初心者で分からず・・
申し訳ないですが教えてください
よろしくお願いします。
以下ソースになります(テストで書いています)

import UIKit

class te: UIViewController,UICollectionViewDataSourcePrefetching,UICollectionViewDelegate,UICollectionViewDataSource {

@IBOutlet weak var collectionview: UICollectionView! let photolist:[String] = ["1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"] override func viewDidLoad() { super.viewDidLoad() collectionview.dataSource = self collectionview.delegate = self collectionview.prefetchDataSource = self // Do any additional setup after loading the view. } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return photolist.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell:UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell",for: indexPath) print("koko:(indexPath)") return cell } func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 } func collectionView(_ collectionView: UICollectionView, prefetchItemsAt indexPaths: [IndexPath]) { print("Prefetch: (indexPaths)") }

}

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

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

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

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

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

guest

回答1

0

ベストアンサー

prefetchItemsAt はスクロールする方向のセルに対してあらかじめメインスレッド以外で呼ばれるものですが、最初から表示されるセルについてはわざわざメインスレッド以外で呼ぶ必要がないので呼ばれないのだと思います。セルの数を増やしてスクロールすれば呼ばれるようになるのではないでしょうか。

以下、API ドキュメント の引用です。

Note

The prefetch method is not necessarily called for every cell in the table view. See Loading Data Asynchronously for details on a suggested approach to loading data.


自分で検証用プロジェクトを作って試してみたところ、collectionView の collectionViewLayout を設定したら呼ばれるようになりました。

swift

1collectionView.collectionViewLayout = UICollectionViewFlowLayout()

投稿2020/03/09 03:30

編集2020/03/09 06:57
hoshi-takanori

総合スコア7895

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

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

mt115jp

2020/03/09 04:08

返答していただきありがとうございますm(_ _)m セル数を増やしスクロールする状態にもっていったのですが スレッドが呼ばれている様子がない状態でした・・・ もう少し試しみます ありがとうございます!
mt115jp

2020/03/09 04:31

コメントありがとうございます! 2500まで増やしてみたんですがやはり呼び出されませんでした(汗
退会済みユーザー

退会済みユーザー

2020/03/09 05:05

storyboardにチェックするとこなかったかしら?(適当)
mt115jp

2020/03/09 05:12

返信ありがとうございます! storyboardのPrefetching Enabledって部分かと思うのですが そこにはチェック入れています!
hoshi-takanori

2020/03/09 05:26

こちらで試してみましたが、prefetchItemsAt は呼ばれませんね。うーん。 ところで、prefetchItemsAt が呼ばれなくて困ることってあります?
mt115jp

2020/03/09 06:19

試してもらってありがとうございます カメラロール みたいなたくさんの画像をスクロールするアプリを 作りたいんですが、prefetchItemsAtを使わずに作ったんですが スクロールの時に処理が追いつかずカクカクしてしまい ネットで検索してる時にprefetchItemsAtなら解決 できそうだったもので(汗 色々検索してた時にサンプルを見つけたんですが https://github.com/ayakix/Image-Picker どこが違うかが全然分からずでした(汗
hoshi-takanori

2020/03/09 06:56

Image-Picker を参考にして collectionView に collectionViewLayout を設定したら呼ばれるようになしました。 collectionView.collectionViewLayout = UICollectionViewFlowLayout()
mt115jp

2020/03/09 07:36

hoshi-takanoriさん 本当にありがとうございました! こちらでも動きました!ここ1週間ずっと悩んでたので(汗 本当に助かりました 言葉足らずの所が多々あったと思うんですが(汗 最後まで付き合っていただきありがとうございました!
hoshi-takanori

2020/03/09 08:16

いえ、こちらこそ勉強になりました。お疲れさまでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問