-1

I want to delete PHAssets at once. I wrote the code below, but it is deleted, but there is a problem that the number of alerts is selected. Couldn't the alert appear only once?

     @IBAction func deleteBtnAction(_ sender: Any) {
    for (key, value) in dictionarySelectedIndexPath {
        if value {
            deletedNeededIndexPath.append(key)
        }
    }
    for i in deletedNeededIndexPath.sorted(by: { $0.item > $1.item}) {
        sortedAlbum(true)
        guard let asset : PHAsset = self.fetchReuslt?.object(at: i.item) else { return }
        let assetArray : NSArray = [asset]
        PHPhotoLibrary.shared().performChanges({PHAssetChangeRequest.deleteAssets(assetArray)}, completionHandler: nil)
    }
    AssetCollectionView.deleteItems(at: deletedNeededIndexPath)
    
}

I think it's because of for in. So I rewritten as below, but the message [PhotoKit] No photos access scope requirements declared for changes came out. Why is that?

@IBAction func deleteBtnAction(_ sender: Any) {
    for (key, value) in dictionarySelectedIndexPath {
        if value {
            deletedNeededIndexPath.append(key)
        }
    }
    
    var assetArray : NSArray = []
    
    for i in deletedNeededIndexPath.sorted(by: { $0.item > $1.item}) {
        sortedAlbum(true)
        guard let asset : PHAsset = self.fetchReuslt?.object(at: i.item) else { return }
        assetArray.addingObjects(from: [asset])

    }

    PHPhotoLibrary.shared().performChanges({PHAssetChangeRequest.deleteAssets(assetArray)}, completionHandler: nil)
    AssetCollectionView.deleteItems(at: deletedNeededIndexPath)
    
}
장주명
  • 43
  • 6

1 Answers1

0

I fixed my code like this:

let assetArray : NSMutableArray = NSMutableArray()
    
    for i in deletedNeededIndexPath.sorted(by: { $0.item > $1.item}) {
        guard let asset : PHAsset = self.fetchReuslt?.object(at: i.item) else { return }
        assetArray.addObjects(from: [asset])
        }

    PHPhotoLibrary.shared().performChanges({PHAssetChangeRequest.deleteAssets(assetArray)}, completionHandler: nil)
    AssetCollectionView.deleteItems(at: deletedNeededIndexPath)

This works fine

장주명
  • 43
  • 6