2015-04-15 40 views
2

失败,我使用setImageData通过以下方式来删除照片:setImageData在iOS 8.3版本

[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。)\”}”

我试着用一些有效的图像数据,而不是‘无’替换图像数据和元数据字段。不过它给了同样的错误!

是?这一些bug在iOS 8.3版本有任何解决方法在期待

感谢

另一个重要信息:?

[PHPhotoLibrary authorizationStatus] R eturns“PHAuthorizationStatusAuthorized”。 [ALAssetsLibrary authorizationStatus]也返回“ALAuthorizationStatusAuthorized”。

回答

-1

用户已经拒绝应用访问他们的媒体

这就解释了为什么你的错误。就系统而言,您无法访问照片库。

你需要看看,如果在Apple Doc's

需要作为表演检查授权状态,并请求你需要的东西,如:

if([PHPhotoLibrary authorizationStatus] != PHAuthorizationStatus.PHAuthorizationStatusAuthorized){ 
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) 
    { 
     if (status != PHAuthorizationStatus.PHAuthorizationStatusAuthorized) 
     { 
     //Fail 
     } 
     else 
     { 
     //SetImageData 
     } 
    } 
} 
+0

我检查[PHPhotoLibrary authorizationStatus]在我的代码。它给出:“PHAuthorizationStatusAuthorized”。 [ALAssetsLibrary authorizationStatus]也给出了“ALAuthorizationStatusAuthorized”。请注意,相同的代码,没有一个单独的更改在8.2中工作得很好!所以,这与8.2到8.3的变化有关! – bilva

+1

授权查看相同的设置属性。 您是否检查过该资产是“可编辑的” 虽然我没有看到为什么这不适用于8.3但适用于8.2。应该指出的是AssetLibrary很可能在将来的版本中被弃用,而不是PhotoKit框架 –

+0

是的。在尝试删除资产之前,我已经对“可编辑”属性进行了检查。 – bilva

2

据我所知,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>

+0

真棒回答。还应该提一提你需要#import

+1

@ jesses.co.tt谢谢!我更新了答案以包含您的建议...... – Artal