- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 setImageData 通过以下方式删除照片:
[asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error)
{
// Do something
}];
此代码在 iOS 8.2 及更早版本中运行良好。
但是,在 8.3 中它给出了错误:
@"Error Domain=ALAssetsLibraryErrorDomain Code=-3311 \"User denied access\" UserInfo=0x175061ac0 {NSLocalizedFailureReason=The user has denied the application access to their media., NSLocalizedDescription=User denied access, NSUnderlyingError=0x17025d700 \"The operation couldn’t be completed. (ALAssetsLibraryErrorDomain error -3311.)\”}"
我尝试用一些有效的图像数据代替“nil”来替换图像数据和元数据字段。仍然给出同样的错误!!
这是 iOS 8.3 中的一些错误吗?有什么解决方法吗?
感谢期待。
另一个重要信息:
[PHPhotoLibrary authorizationStatus] 返回“PHAuthorizationStatusAuthorized”。[ALAssetsLibrary authorizationStatus] 也返回“ALAuthorizationStatusAuthorized”。
最佳答案
据我所知,setImageData 方法从未打算用作删除 Assets 的方法。 Apple 可能在 iOS 8.3 上进行了修补,因此不再有效。
我建议您考虑使用 Photos 框架,其中包含用于删除 Assets 的专用方法。这是一个例子:
-(void)deleteAssetWithURL:(NSString*)assetURLString
{
NSURL *assetURL = [NSURL URLWithString:assetURLString];
if (assetURL == nil)
{
return;
}
PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[assetURL] options:nil];
if (result.count > 0)
{
PHAsset *phAsset = result.firstObject;
if ((phAsset != nil) && ([phAsset canPerformEditOperation:PHAssetEditOperationDelete]))
{
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^
{
[PHAssetChangeRequest deleteAssets:@[phAsset]];
}
completionHandler:^(BOOL success, NSError *error)
{
if ((!success) && (error != nil))
{
NSLog(@"Error deleting asset: %@", [error description]);
}
}];
}
}
}
使用照片框架时,不要忘记链接 Photos.framework
在您的目标中,并在您的源文件中导入 header :#import <Photos/Photos.h>
关于ios - setImageData 在 iOS 8.3 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29648120/
我正在使用 setImageData 通过以下方式删除照片: [asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetUR
我是一名优秀的程序员,十分优秀!