ALAssetsLibrary删除ALAssetsGroup/ALAsset

use*_*119 6 assets assetslibrary alasset alassetslibrary ios5

我使用IOS AssetsLibrary从我的应用程序创建了"照片专辑".

读取ALAssetsLibrary,ALAssetsGroup和ALAsset文档,我看到了"addAsset","addAssetsGroupAlbumWithName"的方法.

有没有办法删除PROGRAMMATICYY我的ALAssetsGroup和ALAsset.(属性'editable'假设为TRUE,因为我创建了这个数据).

eva*_*hin 14

只能删除应用程序使用文档API [ALAsset setImageData:metadata:completionBlock:] 创建的 ALAsset(但我没有找到任何删除ALAssetGroup的API).

1).在您的项目中添加图像"photo.jpg"2).将图像保存到资产库:

ALAssetsLibrary *lib = [ALAssetsLibrary new];
UIImage *image = [UIImage imageNamed:@"photo.jpg"];
[lib writeImageToSavedPhotosAlbum:image.CGImage metadata:@{} completionBlock:^(NSURL *assetURL, NSError *error) {
    NSLog(@"Write image %@ to asset library. (Error %@)", assetURL, error);
}];
Run Code Online (Sandbox Code Playgroud)

3).转到默认图库,您将在"已保存的照片"相册中找到photo.jpg.

4).从资产库中删除此图片:

ALAssetsLibrary *lib = [ALAssetsLibrary new];
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
    [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop) {
        if(asset.isEditable) {
            [asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {
                NSLog(@"Asset url %@ should be deleted. (Error %@)", assetURL, error);
            }];
        }
    }];
} failureBlock:^(NSError *error) {

}];
Run Code Online (Sandbox Code Playgroud)

5).转到默认图库,您会发现photo.jpg已被删除.


hol*_*ann 10

使用任何记录的API都无法做到这一点.只有照片应用才能删除相册.如果您希望将此功能添加到iOS,我会在http://radar.apple.com上填写功能请求.


Ted*_*Ted 7

在ios8中使用照片框架可能会删除照片

请查看Photos Framework的文档

要删除资产,请参阅PHAssetChangeRequest

+ (void)deleteAssets:(id<NSFastEnumeration>)assets
Run Code Online (Sandbox Code Playgroud)

where assetsPHAsset要删除的对象数组.

要删除集合,请参阅PHAssetCollectionChangeRequest

+ (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections
Run Code Online (Sandbox Code Playgroud)

https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetChangeRequest_Class/index.html#//apple_ref/occ/clm/PHAssetChangeRequest/deleteAssets:


小智 5

正如Ted所说,现在可以在iOS 8中使用“照片”服务。其实很干净。您需要向照相馆提交变更请求。这是一个例子。

[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
    [PHAssetChangeRequest deleteAssets:arrayOfPHAssets];
} completionHandler:^(BOOL success, NSError *error) {
    NSLog(@"Finished deleting asset. %@", (success ? @"Success." : error));
}];
Run Code Online (Sandbox Code Playgroud)

确保已导入照片,并获得了用户的授权。(您可能确实已经显示了图像)

PHAssetchangeRequest-deleteAssets https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetChangeRequest_Class/index.html#//apple_ref/occ/clm/PHAssetChangeRequest/deleteAssets:PHPhotoLibrary类-authorizationStatus https:// /developer.apple.com/library/ios/documentation/Photos/Reference/PHPhotoLibrary_Class/#//apple_ref/occ/clm/PHPhotoLibrary/authorizationStatus