2013-08-06 18 views
18

写真ストリームから写真にアクセスしようとすると、[asset defaultRepresentation]メソッドがnilを返すことがあります。共有フォトストリームALAssetのALAssetRepresentationを取得するには?

資産に(まだ)ローカルでは使用できない場合、これが発生することがあります。

このメソッドは、ローカルではまだ利用できない共有写真ストリームからアセットを返します。 。資産が将来使用可能になると、ALAssetsLibraryChangedNotification 通知がポストされます。

Photos.appで写真を表示すると、自分のアプリでも利用できるようになりますが、アプリを「ローカルでダウンロード」するようにしたいと思います。

私はアップルからMyImagePickerサンプルコードを見て、それは同じ挙動を示す(サムネイルのみが使用可能です)どのように私はローカルで資産が利用できるようにすることができ

編集:AppleがiOS8にPhotos.frameworkを導入し、ALOSetsを使用していることがiOS9で推奨されなくなったため、これは決して修正されません。

+1

iOS7でより頻繁に実行されるこの問題にも取り組んでいます。他のアプリにはこれらの画像をロードする方法があるようですので、方法が必要ですが、ALAsset関連のドキュメントを読むと何も明らかにされていません... – Laura

+0

@Laura私はiOS7でもこれを見ることができますが、私は他のアプリが同じ写真を正しく扱っているのを見たとは言いません。 (そのような画像が私のアプリにロードされない場合、私はinstagramに切り替わり、同じ写真にアクセスしようとするとクラッシュする)。 AppleのPhotoアプリで写真を開いたら、どこでも正しく動作します。 – Pieter

+0

Pic Collageは、私が動作したように見える(少なくとも時にはそれがちょうどクラッシュする)アプリです。写真ピッカーからサムネイルを選択すると、最初に写真がぼやけた正方形のサムネイルとして追加されてから、次にサムネイルがフルサイズの画像に置き換えられます。だから、それは外れてロードされているように見えますが、今は確実ではありません。私は新しいアルバムを作成しようとしました、そのアルバムにアセットを追加して、そのグループのアセットを列挙しようとしましたが、サイコロもありませんでした。 – Laura

答えて

1

をし、すべてのALAssetはiOS9で推奨されなくなりましたが、これは決して固定されるとは言えません。

ただし、これは新しいPhotoKit APIで正しく行うことができます。

PHImageRequestOptionsに画像を要求するときにnetworkAccessAllowed = YESを設定し、必要に応じて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 */ }]; 
4

私は同じ問題に陥ります。私は実際に画像を取得する方法を見つけることができませんでした。 あなたがすることができるすべては、私は答えを見つけた

2

を助けること[ALAssetsLibrary disableSharedPhotoStreamsSupport];

希望を呼び出すことにより、「defaultRepresentation」nilを持っている画像を表示したり、すべての共有写真のサポートをドロップされていません!これは文書化されていないため、以下の回答を慎重に使用してください。 (注意して、AppleはプライベートAPIコールを使用することはできません)。

アセットには- (void)requestDefaultRepresentation;という名前のメソッドがあり、このメソッドを使用してアセットライブラリをトリガーして共有写真をダウンロードできます。文書に記載されているように、ALAssetsLibraryChangedNotificationは、画像が利用可能になったことを知らせるために解雇されます。

Appleがなぜそれを文書化しなかったのか、考えられません。幸運はあなたが次のヘッダーとの警告を回避することができます楽しい=)

を持っている:PhotoKitフレームワークはiOS8にアップルが導入されているので

ALAsset + RequestDefaultRepresentation.h

#import <AssetsLibrary/AssetsLibrary.h> 

@interface ALAsset (RequestDefaultRepresentation) 
- (void)requestDefaultRepresentation; 
@end 
+0

親切なAPIを使用していることは明らかですが、明らかにAppstore上のアプリにとっては容認できる解決策ではありません。 – Pieter

+1

私はそれが存在し、それが行える方法を明確にしています。他の方法はありません。 – Mark

関連する問題