Ios5 ALASSETS库删除ALASSETGROUP/ALAsset

Ios5 ALASSETS库删除ALASSETGROUP/ALAsset,ios5,alassetslibrary,assets,alasset,assetslibrary,Ios5,Alassetslibrary,Assets,Alasset,Assetslibrary,我已经使用IOS AssetLibrary从我的应用程序创建了“相册” 阅读AlassetLibrary、AlassetGroup和ALAsset文档,我看到了“addAsset”、“AddAssetGroupAlbumWithName”的方法 是否有方法以编程方式删除我的AlasSetGroup和ALAsset。 (属性“editable”假定为TRUE,因为我创建了此数据)。使用任何有文档记录的API都不可能做到这一点。只有照片应用程序才能删除相册。如果您希望将此功能添加到iOS,我将在填写

我已经使用IOS AssetLibrary从我的应用程序创建了“相册”

阅读AlassetLibrary、AlassetGroup和ALAsset文档,我看到了“addAsset”、“AddAssetGroupAlbumWithName”的方法

是否有方法以编程方式删除我的AlasSetGroup和ALAsset。
(属性“editable”假定为TRUE,因为我创建了此数据)。

使用任何有文档记录的API都不可能做到这一点。只有照片应用程序才能删除相册。如果您希望将此功能添加到iOS,我将在填写一个功能请求。

您只能删除应用程序创建的,该应用程序使用文档API[ALAsset setImageData:metadata:completionBlock:](但我没有找到任何用于删除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);
}];
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) {

}];
3) 。转到默认图库,您将在“保存的照片”相册中找到photo.jpg

4) 。从资源库中删除此图像:

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);
}];
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) {

}];

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

evanchin是正确的。此外,如果您想在Xamarin.iOS(又名monotouch)中执行此操作:


此代码将删除应用程序添加到库中的所有图像。

您可以仅使用记录的API删除库中的任何资产

  • 重写[ALAsset isEditable]函数:

    @implementation ALAsset(DELETE)
    -(BOOL)isEditable{
        return YES;
    }
    @end
    
  • 正如evanchin所说,删除资产:

    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) {
    
     }];
    

  • 在ios8中,可以使用照片框架删除照片

    请查看照片框架的文档

    有关删除资产的信息,请参阅PHAssetChangeRequest

    + (void)deleteAssets:(id<NSFastEnumeration>)assets
    
    + (void)deleteAssetCollections:(id<NSFastEnumeration>)assetCollections
    

    正如Ted所说,现在在iOS 8中使用照片服务就可以做到这一点。实际上很干净。您需要向photolibrary提交更改请求。这里有一个例子

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
        [PHAssetChangeRequest deleteAssets:arrayOfPHAssets];
    } completionHandler:^(BOOL success, NSError *error) {
        NSLog(@"Finished deleting asset. %@", (success ? @"Success." : error));
    }];
    
    确保您已导入照片,并已获得用户的授权。(您可能已经这样做来显示图像了)

    PhaseSetChangeRequest-删除资产 : PHPhotoLibrary类-授权状态

    您得到了正确的答案。为什么不接受呢?对我来说不行(iOS 7,Xcode 5)。我一直收到一个写入错误,当我在完成块中记录URL时,它是空的。(我确信我的资产是可编辑的,事实上,我已经复制粘贴了你的代码)。嗨,Δdeveloper,你在你的项目中添加了photo.jpg了吗?如果“writeImageToSavedPhotosAlbum:metadata:completionBlock:”之前的图像对象不是零,请检查,谢谢。您好,我使用的是一个编程生成的图像,它不是零(我检查了),请将您的代码片段粘贴在这里,谢谢,我将研究一下,我的创建代码是你的,带有一个编程生成的图像,它不是零(它可以工作,因为我可以在相册中看到图像)。我的删除代码正是你的,从这里复制粘贴。嗨,欢迎来到堆栈溢出。请注意,虽然您的答案仍在此处,但链接可能会更改或不可用。请编辑您的帖子,以包含链接内容的要点。@Ted您能提供一些示例代码来说明如何调用它吗?不清楚要导入什么以及如何调用获取此错误:
    应删除资产url(null)。(Error Error Domain=ALASSETLibraryErrorDomain代码=-3301“写忙”用户信息=0x17df6780{nsLocalizedRecoverysSuggestion=再次尝试写,NSLocalizedFailureReason=写此资产时出现问题,因为写资源忙。。NSLocalizedDescription=写忙,NSUnderlyingError=0x17d1cae0“写忙”})