ALAsset NSURL * assetURL返回NULL

时间:2013-10-10 22:56:37

标签: iphone ios alassetslibrary

我在尝试使用ALAssetsLibrary将图像保存到SavedPhotosAlbum时遇到了一个奇怪的问题,特别是当我使用writeImageToSavedPhotosAlbum方法时。

基本上我的问题是NSURL在我的完成块中返回null ...没有错误,但是URL为空。

以下是方法:

UIImage *imageToSave = [libraryPicture imageFromCurrentlyProcessedOutput];


  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
  [library writeImageToSavedPhotosAlbum:[imageToSave CGImage] orientation:ALAssetOrientationUp  completionBlock:^(NSURL *assetURL, NSError *error) {

  NSLog(@"AssetURL: %@", assetURL);

  if(!error) {
    NSLog(@"\t ! Error");
    NSLog(@"\t Error: %@", [error localizedDescription]);
    NSLog(@"\t Error code %d", [error code]);
  }

  if(error != nil) {
    NSLog(@"\t ERROR != NIL");
    NSLog(@"\t Error - Image Failed To Save With Error: %@", [error localizedDescription]);
    NSLog(@"\t Error code %d", [error code]);
  }

  if(error == nil) {
    NSLog(@"\t ERROR == NIL");
  }

  }];

我使用一个非常类似的方法(仅在几行之外)(在另一个开关案例中)可以工作,并且它在几乎相同的完成块中打印URL(尽管被调用的方法不同):

[stillCamera capturePhotoAsJPEGProcessedUpToFilter:selectedFilter withCompletionHandler:^(NSData *processedJPEG, NSError *error) {
  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
  [library writeImageDataToSavedPhotosAlbum:processedJPEG metadata:stillCamera.currentCaptureMetadata completionBlock:^(NSURL *assetURL, NSError *error2) {
    if (error2 != nil) {
      NSLog(@"ERROR: the image failed to be written");
    }
    else {
      NSLog(@"PHOTO SAVED FROM STILL CAMERA - assetURL: %@", assetURL);
    }

  }];
}];

1 个答案:

答案 0 :(得分:0)

如果您确实看到了您所声明的行为,那么这似乎是资产库违反其API合同。您应该向Apple提交一个雷达,并提供示例项目来演示这一点,并且可能还会提交DTS事件以加快响应速度。