2016-11-28 9 views
0

から項目を削除した後、私は私のアプリのための写真のコレクションビューを使用していました。 コレクションビューからアイテムを簡単に削除できましたが、コレクションビューからアイテムを即座に削除することはありません。私が別のビューコントローラーに行き、コレクションビューコントローラーに戻ると、コレクションビューが削除されたアイテムを更新して削除します。私は、削除操作が発生するとすぐにコレクションビューを更新したい。どうすればこの問題を解決できますか?前もって感謝します。 は私の迅速なコードは以下のとおりである:ここでは更新/リロードコレクションビューUICollectionView

import UIKit 
import Photos 

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate{ 

var assetCollection: PHAssetCollection = PHAssetCollection() 
var photosAsset: PHFetchResult! 
var assetThumbnailSize:CGSize! 
var selectedIndexPath = [NSIndexPath]() 

@IBAction func deleteButton(sender: UIButton) { 

    if selectedIndexPath.count != 0{ 

       PHPhotoLibrary.sharedPhotoLibrary().performChanges({ 
        //Delete Photo 
        if let request = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection){ 
         for a in self.selectedIndexPath{ 
         request.removeAssets([self.photosAsset[a.item]]) 

        } 
        } 
        }, completionHandler: nil)} 


       self.collectionView.reloadData() 
} 

は私のviewWillAppearメソッドです:

override func viewWillAppear(animated: Bool) { 

    // Get size of the collectionView cell for thumbnail image 
    if let layout = self.collectionView.collectionViewLayout as? UICollectionViewFlowLayout{ 
     let cellSize = layout.itemSize 
     self.assetThumbnailSize = CGSizeMake(cellSize.width, cellSize.height) 
    } 

    self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil) 


    if let photoCnt = self.photosAsset?.count{ 
     if(photoCnt == 0){ 
      self.noPhotosLabel.hidden = false 
     }else{ 
      self.noPhotosLabel.hidden = true 
     } 
    } 

    self.collectionView.reloadData() 

} 

答えて

0

あなたの完了ハンドラ内でリロードメソッドを追加する必要があります。

PHPhotoLibrary.sharedPhotoLibrary().performChanges({ 
       //Delete Photo 
       if let request = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection){ 
        for a in self.selectedIndexPath{ 
        request.removeAssets([self.photosAsset[a.item]]) 

       } 
       } 
       }, completionHandler: { _ in 
    self.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection, options: nil) 
    dispatch_async(dispatch_get_main_queue(), { self.collectionView.reloadData() }) 
    }) 
+0

私はあなたのアドバイスに応じて試してみましたが、それは動作しません。私は私の質問で説明したものと同じ問題の問題に直面しています。あなたが私にさらに助言を与えるなら、私は感謝します。ありがとうございました。 –

+0

一方または両方のコレクションビューのデータソースメソッドが動的ではないため、更新されない可能性があります。補完ハンドラでself.photosAsset = PHAsset.fetchAssetsInAssetCollection(self.assetCollection、options:nil)を続けてself.collectionView.reloadData()を追加して、改善されているかどうか教えてください。私はこの考え方で私のソリューションを更新しました。 – gwinyai

+0

これは機能しますが、コレクションビューの削除や更新には10〜15秒ほどの時間がかかります。それは、この "0 CoreFoundationの0x24d7b933 + 150 \tを示しても「これは、将来のリリースで例外が発生します。このアプリケーションは、エンジンの破損や奇妙なクラッシュにつながることができ、バックグラウンドスレッドから自動レイアウトエンジンを変更している」とのような警告を示してい1 libobjc.A.dylib 0x24516e17 objc_exception_throw + 38 \t 2 CoreFoundation 0x24d7b861 + 0 \t 3 Foundation 0x2566d3e7 + 170 "タイプ。この問題を解決するためのアドバイスをお願いします。 –

関連する問題