2017-03-28 10 views
1

私は1000以上のレコード(画像資産でimage.jpg〜1.0メガバイト)とCloudKitデータベースを持っているロード1000の記録

私はCollectionViewCellにイメージをロードする必要がありますか?

私のコードは次のとおりです。

func loadData(){ 
     self.loading.startAnimating() 
     let query = CKQuery(recordType: self.recordType, predicate: predicate) 
     query.sortDescriptors = [NSSortDescriptor(key: "productID", ascending: true)] 
     operation.query = query 
     operation.resultsLimit = 1000 
     operation.qualityOfService = .userInteractive 
     operation.recordFetchedBlock = { (record) in 
      self.items.append(record) 
      DispatchQueue.main.async { 
       self.collectionView.reloadData() 
      } 
     } 
     operation.queryCompletionBlock = { (queryCursor, error) in 
      DispatchQueue.main.async { 
       self.loading.stopAnimating() 
      } 
     } 
     myData.add(operation) 
    } 

マイCollectionViewCell:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "productCell", for: indexPath) 
     let img = UIImageView(frame: CGRect(x: 1, y: 1, width: w - 2, height: h - 2)) 
     img.contentMode = .scaleAspectFill 
     img.image = UIImage(contentsOfFile: (self.items[indexPath.item]["productImage"] as! CKAsset).fileURL.path) 
     cell.contentView.addSubview(img) 

     return cell 
    } 
+0

あなたの質問は何ですか?イメージを表示するために 'UICollectionView'を使う必要があるのですか?または、実際には動作しない上記のコードに関する問題はありますか? – Fahim

+0

私は恐怖です。私のアプリがクラッシュする可能性があります。セルは常に大きなデータをロードします。ですから、イメージをセルにロードするか、イメージを配列にロードして後でcollectionViewをリロードする必要がありますか? –

+0

'UICollectionView'と' UITableView'の両方は、可視セルのデータだけを読み込みます。だから彼らは一度にすべてのデータをロードするつもりはありません。しかし、画像が大きければ、ユーザーがスクロールするときに、画像をダウンロードする必要がある場合には、多くの帯域幅を消費します。 – Fahim

答えて

2

代わりに1000を取得するには、あなたが小さなセットをあなたのUICollectionViewのたびにユーザーがスクロールを取得する必要があり1時間を記録します。

これにより、より良いパフォーマンスが得られ、必要な画像だけを復元できます。このあなたは別のCKQueryCursorを渡すフェッチを実行する必要があるたびに、ユーザーが自分のCollectionViewの最後に到達するあなたのCollectionViewプラス5または6

を示したイメージ量に収まる数にresultsLimitプロパティを設定する必要がありますを行うには

パラメータとして使用します。