ALAsset NSURL *assetURL 返回 NULL

Posted

技术标签:

【中文标题】ALAsset NSURL *assetURL 返回 NULL【英文标题】:ALAsset NSURL *assetURL returns NULL 【发布时间】:2013-10-10 22:56:37 【问题描述】:

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

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

方法如下:

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");
  

  ];

我在几行之外使用了一个非常相似的方法(在另一个 switch 案例中),它可以在几乎相同的完成块中打印 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】:

如果您确实看到了您所说的行为,这似乎是资产库违反了其 API 合同。您应该向 Apple 提交一份雷达报告,并附上一个示例项目来证明这一点,或许还应该提交一份 DTS 事件以加快响应速度。

【讨论】:

以上是关于ALAsset NSURL *assetURL 返回 NULL的主要内容,如果未能解决你的问题,请参考以下文章

我如何知道资产库中存在 ALAsset 的 NSURL?

如何从 Photos 框架中的assetURL 获取 PHAsset?

如何将 ALAsset 添加到照片流?

从 ALAsset 检索添加到库的日期?

从 MPMediaItems 获取 iCloud 状态信息

在 iOS 中构建高级均衡器