18

当我尝试从照片流中访问图片时,有时该[asset defaultRepresentation]方法返回 nil。

根据文档,如果资产(尚未)在本地可用,则可能会发生这种情况。

对于来自共享照片流但在本地尚不可用的资产,此方法返回 nil。如果资产将来可用,则会发布 ALAssetsLibraryChangedNotification 通知。

一旦我在 Photos.app 中查看照片,它也可用于我的应用程序,但显然我想让我的应用程序触发“本地下载”事件。

我查看了 Apple 的MyImagePicker示例代码,但它表现出相同的行为(只有缩略图可用)

如何使资产在本地可用?

编辑:由于 Apple 在 iOS8 中引入了Photos.framework,并且在 iOS9 中不推荐使用 ALAssets,这可能永远不会得到修复。

4

3 回答 3

4

我陷入同样的​​问题。我找不到实际获取图像的方法。您所能做的就是不显示具有“defaultRepresentation”nil 的图像,或者通过调用完全放弃对共享照片的支持[ALAssetsLibrary disableSharedPhotoStreamsSupport];

希望有帮助

于 2013-09-29T20:33:02.847 回答
2

我找到了答案!它没有记录,因此请谨慎使用以下答案。(谨慎我的意思是,Apple 不允许使用私有 API 调用)。

在资产上有一个名为- (void)requestDefaultRepresentation;您可以使用此方法触发资产库下载共享照片的方法。如文档中所述,ALAssetsLibraryChangedNotification将被解雇以让您知道图像可用。

不知道,为什么Apple没有记录它。祝你好运玩得开心 =)

您可以使用以下标头避免警告:

ALAsset+RequestDefaultRepresentation.h

#import <AssetsLibrary/AssetsLibrary.h>

@interface ALAsset (RequestDefaultRepresentation)
- (void)requestDefaultRepresentation;
@end
于 2014-05-22T15:38:37.957 回答
1

由于 Apple 在 iOS8 中引入了 PhotoKit 框架,并且所有 ALAsset 的东西在 iOS9 中都被弃用了,可以肯定地说这永远不会得到修复。

但是,这可以通过新的 PhotoKit API 正确完成。

您必须在请求图像时将其设置为networkAccessAllowed = YESon,PHImageRequestOptions如果需要,它将从 iCloud 下载。

 PHAsset* photoAsset = ...
 CGSize fullImageSize = ...
 PHImageRequestOptions* options = [PHImageRequestOptions new];
 options.networkAccessAllowed = YES;
 [[PHImageManager defaultManager] requestImageForAsset:photoAsset
      targetSize:fullImageSize  contentMode:PHImageContentModeAspectFill
      options:options  resultHandler:^(UIImage *result, NSDictionary *info) {  /* use result image */  }];
于 2015-12-08T16:11:30.687 回答