[iOS 8] PhotoKit 5 – Photos Framework – モデルオブジェクトの削除

はじめに

今回はモデルオブジェクトの削除を扱います。

モデルオブジェクトを削除するにはまず、編集処理がサポートされているかを問い合わせます。編集処理がサポートされていたら PHPhotoLibraryクラスのperformChanges:completionHandler:メソッドの 一つ目の引数のblock内に削除処理を記述します。

PHAssetの削除

PHAssetを削除する場合は、PHAssetChangeRequestクラスのdeleteAssets:メソッドを使用します。 処理完了時の処理は、performChanges:completionHandler:メソッドの2つめのblockに記述します。

// 編集処理がサポートされているか
if ([asset canPerformEditOperation:PHAssetEditOperationDelete]) {
    // 変更をリクエストするblockを実行
    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        // Assetをlibraryから削除
        [PHAssetChangeRequest deleteAssets:@[asset]];
    } completionHandler:^(BOOL success, NSError *error) {
        if (success) {
            NSLog(@"%s delete success.", __PRETTY_FUNCTION__);
        } else {
            NSLog(@"%s delete failure. Error: %@", __PRETTY_FUNCTION__, error);
        }
    }];
}

確認ダイアログ

deleteAssets:メソッドを呼んだタイミングで以下のようなダイアログが表示されます。

ios8-photo-kit_delete-1

「削除」を選択した場合

「削除」 を選択すると、フォトライブラリから削除されます。(実際にはSmartAlbumのひとつである「Recently Deleted(最近削除された項目)」に追加され、30日後に完全に削除されるようです)

ios8-photo-kit_delete-2

「許可しない」を選択した場合

「許可しない」 を選択すると、completionHandlerのblockの引数にNSErrorオブジェクトが渡されます。 (NSErrorオブジェクトのlocalizedDescriptionは「The operation couldn’t be completed. (Cocoa error -1.)」)

PHCollectionListやPHAssetCollectionの削除

PHCollectionListやPHAssetCollectionに関しても、PHAssetと同様に削除を行えます。 OSが自動生成するMomentリストなどは削除できず、削除できるのは、サードパーティアプリが作成したフォルダやユーザーが作成したフォルダなどに限られるようです。(Photosアプリと同様)

クラス名 メソッド 内容
PHCollection (PHCollectionList/PHAssetCollectionのスーパークラス) canPerformEditOperation: 編集処理がサポートされているかどうかを返す
PHCollectionListChangeRequest deleteCollectionLists: PHCollectionListの削除用のリクエストを作成
PHAssetCollectionChangeRequest deleteAssetCollections: PHAssetCollectionの削除用のリクエストを作成

まとめ

今回はモデルオブジェクトの削除について説明しました。次回はモデルの変更のハンドリングとコンテンツ編集のrevertを扱います。

参考資料

本シリーズの記事一覧