iOS7删除相机照片
取巧方式删除iOS7照片
1. 苹果在iOS8之前访问照片图库,主要是ALAssetsLibrary,可是这个库暴露的API没有直接删除照片的接口,网上可行方法是:[alasset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error)],不过这个方法只能删除自身创建的图片,也就是alasset.isEditable = YES ,而该属性确实一个只读属性,如图1
图1那不是App自身创建的照片,比如用户自己相机拍的照片如何删除呢?网上找了好久也没找到有私有API可以调用,即便有,也不好过苹果审核这一关。真的没有办法了吗?
百度魔拍可以删除相机照片
咦?它是这么做到的呢?上IDA看看图2,也是调用上面方法,莫非它的‘isEditable’真有魔法?
图2原来它用Category重写了这个方法 图3:
图3[alasset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error)]
看来‘setImageData’ 方法会先调用Alasset.isEditable 方法,然后执行setImageData操作,设置个断点看看,图4,果然
图42.原理知道了就好办了,ALAsset新建一个Category,上代码
#import "ALAsset+Delete.h"
@implementation ALAsset (Delete)
-(BOOL)isEditable{
return YES;
}@end
3.上面的方法在8.3固件后彻底失效,需要用Photos.framework(8.0固件引入的新framework) 里面提供的删除方法,这里上一份iOS8,9批量删除照片的代码:
PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:assetURLs options:nil];
if (result.count > 0)
{
NSMutableArray *toDeleteAssets = [NSMutableArray new];
for (PHAsset *asset in result) {
[toDeleteAssets addObject: asset];
}
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^
{
[PHAssetChangeRequest deleteAssets:toDeleteAssets];
}
completionHandler:^(BOOL success, NSError *error)
{
if ((!success) && (error != nil))
{
NSLog(@"Error deleting asset: %@", [error description]);
}
}];
}
代码段没格式化好,见谅哈,俺得熟悉下Markdown😍
有疑问到我微信公众号留言
![MineWeiXin.png](https://img.haomeiwen.com/i2137046/16b23595991cc783.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)