Ios5 ALASSETS库删除ALASSETGROUP/ALAsset
我已经使用IOS AssetLibrary从我的应用程序创建了“相册” 阅读AlassetLibrary、AlassetGroup和ALAsset文档,我看到了“addAsset”、“AddAssetGroupAlbumWithName”的方法 是否有方法以编程方式删除我的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,我将在填写
(属性“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删除库中的任何资产
@implementation ALAsset(DELETE)
-(BOOL)isEditable{
return YES;
}
@end
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“写忙”})