我正在使用setImageData以下列方式删除照片:
[asset setImageData:nil metadata:nil completionBlock:^(NSURL *assetURL, NSError *error)
{
// Do something
}];
此代码在iOS 8.2及更早版本中运行良好。
但是,在8.3中它给出了错误:
@“错误域= ALAssetsLibraryErrorDomain代码= -3311 \”用户拒绝访问\“UserInfo = 0x175061ac0 {NSLocalizedFailureReason =用户拒绝了应用程序访问其媒体。,NSLocalizedDescription =用户拒绝访问,NSUnderlyingError = 0x17025d700 \”操作无法完成。 (ALAssetsLibraryErrorDomain错误-3311。)\“}”
我尝试用一些有效的图像数据而不是“nil”替换图像数据和元数据字段。它仍然给出了相同的错误!!
这是iOS 8.3中的一些错误吗?有没有解决方法?
感谢您的期待。
另一个重要信息:
[PHPhotoLibrary authorizationStatus]返回“PHAuthorizationStatusAuthorized”。 [ALAssetsLibrary authorizationStatus]也返回“ALAuthorizationStatusAuthorized”。
答案 0 :(得分:3)
据我所知,setImageData方法从未打算用作删除资产的方法。有可能在iOS 8.3上修补了Apple,所以这不再适用。
我建议你研究使用Photos框架,其中包含一个删除资产的专用方法。 这是一个例子:
-(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
,并在源文件中导入标题:#import <Photos/Photos.h>
答案 1 :(得分:0)
我有类似的问题,但也无法解决。我认为它是8.3中的一个带有AssetsLibrary的错误,并建议你像我一样向Apple提交错误报告:
Can't edit photo metadata using AssetsLibrary in iOS 8.3 (worked in 8.2)
答案 2 :(得分:-1)
用户拒绝了应用程序访问其媒体
这解释了您遇到错误的原因。就系统而言,您无权访问照片库。
您需要查看检查授权状态,并在Apple Doc's
中显示,如果需要请求您需要以下内容:
if([PHPhotoLibrary authorizationStatus] != PHAuthorizationStatus.PHAuthorizationStatusAuthorized){
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status)
{
if (status != PHAuthorizationStatus.PHAuthorizationStatusAuthorized)
{
//Fail
}
else
{
//SetImageData
}
}
}