0

UICollectionViewカスタムセルで実装しようとしています。セットアップはのとおりです。

  • 4セル
  • ダウンロードした画像のデータを取得した場合 => セルの imageView にその画像を入力します。
  • それ以外の場合: プレースホルダーを使用します。

画像のPFFilesは 内に保存されますimageFileDic:[String:PFFile]

これは私の更新 cellForItemAtIndexPathです:

   let collectionCell:SettingsCollectionViewCell =
   collectionView.dequeueReusableCellWithReuseIdentifier("collectionCell",
   forIndexPath: indexPath) as! SettingsCollectionViewCell


    if indexPath.row < imageFileDic.count {


        if let imageId = imageFileIds[indexPath.row] as? String {

            if let imageData = imageFileDic[imageId]{

                collectionCell.collectionViewImage.file = imageData
                collectionCell.collectionViewImage.loadInBackground()

            }

        }
    } else{

        collectionCell.collectionViewButton.setImage(UIImage(), forState: .Normal)
        collectionCell.collectionViewImage.image = UIImage(named: "CameraBild.png")

    }

時々 (1/5 回) 、私のアプリケーションは画像を 2 回表示するか、セル nr の位置に表示することを決定します。4.

私のクエリでは、新しいデータを追加する前に、常に辞書と配列を削除しています。

何か案は?

編集: これはPFQuery私が呼んでいるものです:

let imageQuery = PFQuery(className: "Images")
    imageQuery.whereKey("sender", equalTo: objectID!)
    imageQuery.addAscendingOrder("createdAt")
    imageQuery.cachePolicy = .NetworkElseCache

    imageQuery.findObjectsInBackgroundWithBlock { (objects, error) in
        if error != nil {
        createAlert(error!)
        }
        else{
            if let objects = objects{


                self.imageFileDic.removeAll()
                self.imageFileIds.removeAll()

                for object in objects{

                    if let id = object.objectId{
                        print("id found")
      if let imageFile = object.objectForKey("imageFile") as? PFFile{

                        self.imageFileIds.append(id)
                        self.imageFileDic[id] = imageFile



                            if object == objects.last{
                            print(self.imageFileIds.count)
                            print(self.imageFileDic.count)

                            self.mainCollectionView.reloadData()
                            }

                        }
                    }

                }
            }
        }
    }

}
4

1 に答える 1

1

画像をメインスレッドに更新する必要があると思います

dispatch_async(dispatch_get_main_queue()) { 
        collectionCell.collectionViewImage.file = imageData
        collectionCell.collectionViewImage.loadInBackground()
    }
于 2016-09-01T11:15:29.047 に答える