在iOS 8.3中,setImageData失败

时间:2015-04-15 10:43:47

标签: ios

我正在使用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”。

3 个答案:

答案 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
      }
   }
}