当我尝试从照片流中访问图片时,有时[asset defaultRepresentation]
方法会返回nil。
根据文档,如果资产尚未在本地可用,则可能会发生这种情况。
此方法为共享照片流中尚未提供的资源返回nil 本地。如果资产将来可用,则为ALAssetsLibraryChangedNotification 通知已发布。
一旦我在Photos.app中查看照片,它也可用于我的应用程序,但显然我想让我的应用程序触发"本地下载"事件。
我查看了Apple的MyImagePicker示例代码,但它表现出相同的行为(只有缩略图可用)
如何在本地提供资源?
编辑:由于Apple在iOS8中引入了Photos.framework,并且在iOS9中使用ALAssets已被弃用,因此可能永远不会修复。
答案 0 :(得分:4)
我陷入同样的问题。我找不到实际获取图像的方法。
您只能通过调用[ALAssetsLibrary disableSharedPhotoStreamsSupport];
希望有所帮助
答案 1 :(得分:2)
我找到了答案!没有记录,因此请谨慎使用以下答案。 (谨慎我的意思是,Apple不允许使用私有API调用)。
在资产上有一个名为- (void)requestDefaultRepresentation;
的方法,您可以使用此方法触发资源库下载共享照片。如文档中所述,将ALAssetsLibraryChangedNotification
触发,以通知您图像可用。
不知道,为什么Apple没有记录它。祝你好运玩得开心=)
您可以使用以下标题避免警告:
<强> ALAsset + RequestDefaultRepresentation.h 强>
#import <AssetsLibrary/AssetsLibrary.h>
@interface ALAsset (RequestDefaultRepresentation)
- (void)requestDefaultRepresentation;
@end
答案 2 :(得分:1)
由于Apple在iOS8中引入了PhotoKit框架,并且所有ALAsset内容在iOS9中都被弃用,因此可以肯定地说这将永远不会得到修复。
然而,这可以通过新的PhotoKit API正确完成。
在要求提供图片时,您必须在networkAccessAllowed = YES
上设置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 */ }];