Удаление PHAssetCollection (Swift)

Я создал коллекцию PHAssetCollection для размещения своих фотографий для своего приложения, и она отлично работает. Однако я пытаюсь сделать так, чтобы пользователь мог удалить PHAssetCollection при нажатии кнопки. Как мне удалить всю коллекцию AssetCollection («Папка приложения»), которую я создал в следующем коде?



Код для создания PHAssetCollection:

    let albumName = "App Folder" 

    //Check if the folder exists, if not, create it
    let fetchOptions = PHFetchOptions()
    fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
    let collection:PHFetchResult = PHAssetCollection.fetchAssetCollectionsWithType(.Album, subtype: .Any, options: fetchOptions)

    if let first_Obj:AnyObject = collection.firstObject{
        //found the album
        self.albumFound = true
        self.assetCollection = first_Obj as! PHAssetCollection
    }else{
        //Album placeholder for the asset collection, used to reference collection in completion handler
        var albumPlaceholder:PHObjectPlaceholder!
        //create the folder
        NSLog("\nFolder \"%@\" does not exist\nCreating now...", albumName)
        PHPhotoLibrary.sharedPhotoLibrary().performChanges({
            let request = PHAssetCollectionChangeRequest.creationRequestForAssetCollectionWithTitle(albumName)
            albumPlaceholder = request.placeholderForCreatedAssetCollection
            },
            completionHandler: {(success:Bool, error:NSError!)in
                if(success){
                    println("Successfully created folder")
                    self.albumFound = true
                    if let collection = PHAssetCollection.fetchAssetCollectionsWithLocalIdentifiers([albumPlaceholder.localIdentifier], options: nil){
                        self.assetCollection = collection.firstObject as! PHAssetCollection
                    }
                }else{
                    println("Error creating folder")
                    self.albumFound = false
                }
        })

    }

person Josh O'Connor    schedule 12.07.2015    source источник


Ответы (2)


В PHAssetCollectionChangeRequest есть метод класса, называемый deleteAssetCollections:, который делает именно это: запрашивает удаление определенных коллекций активов. Глядя на документацию, кажется, что вы можете просто вызвать это с массивом PHAssetCollections следующим образом:

PHAssetCollectionChangeRequest.deleteAssetCollections(self.assetCollection)
person mattwyskiel    schedule 12.07.2015
comment
Это не сработало, но было близко, ему нужен обработчик завершения... Я нашел решение в своем обновленном ответе. - person Josh O'Connor; 13.07.2015

просто упростил использование. надеюсь, это поможет: вот функция для программного удаления пользовательского альбома с обработкой ошибок

    func deleteAlbum(albumName: String){
        let options = PHFetchOptions()
        options.predicate = NSPredicate(format: "title = %@", albumName)
        let album = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: options)


        // check if album is available
        if album.firstObject != nil {

            // request to delete album
        PHPhotoLibrary.shared().performChanges({
            PHAssetCollectionChangeRequest.deleteAssetCollections(album)
        }, completionHandler: { (success, error) in
            if success {
                print(" \(albumName) removed succesfully")
            } else if error != nil {
                print("request failed. please try again")
            }
        })
        }else{
            print("requested album \(albumName) not found in photos")
        }
    }

Как использовать -

   deleteAlbum(albumName: "YourAlbumName")
person jayesh chaudhari    schedule 23.10.2019