UIImagePickerControllerユーザーがアプリで共有する写真やビデオを選択できるようにするためにを使用しています。ユーザーがライブラリ内のメディア アイテムを選択すると、UIImagePickerController'sデリゲート メソッドの 1 つで次のコードを実行します。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
PHAsset *asset;
if ([info[@"UIImagePickerControllerMediaType"] isEqualToString:@"public.movie"]) {
// Video
asset = [[PHAsset fetchAssetsWithALAssetURLs:@[info[@"UIImagePickerControllerReferenceURL"]] options:nil] lastObject];
} else if ([info[@"UIImagePickerControllerMediaType"] isEqualToString:@"public.image"]) {
// Photo
PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[info[@"UIImagePickerControllerReferenceURL"]] options:nil];
asset = [[PHAsset fetchAssetsWithALAssetURLs:@[info[@"UIImagePickerControllerReferenceURL"]] options:nil] lastObject];
}
}
if statementsというタイトルのアルバムからアイテムを選択する場合を除いて、どちらも写真とビデオの両方で正常に機能します"My Photo Stream"。
からアイテムを選択すると、常に"My Photo Stream"が返されます。PHAssetnil
ALAssetsLibrary assetForURL: iOS 8.1 の「マイ フォト ストリーム」の写真に対して常に nil を返す
ただし、上記のリンクでは、 AssetsLibraryApple が推奨しなくなったフレームワークを使用しています。
「iOS 8.0 以降では、Assets Library フレームワークの代わりに Photos フレームワークを使用します。Photos フレームワークは、ユーザーのフォト ライブラリを操作するためにより多くの機能と優れたパフォーマンスを提供します。Photos フレームワーク リファレンスを参照してください。」
アルバムPHAsset内のメディア アイテムのオブジェクトを返せるようにする必要があります。現在、ディクショナリで"My Photo Stream"返される参照 URLは、コンソールにログインする有効な URL ですが、この URL を使用すると、有効なオブジェクトが返されることはありません。UIImagePickerControllerinfoPHAsset
didFinishPickingMediaWithInfo:デリゲート メソッドの情報ディクショナリで返される参照 URL の例を次に示します。
assets-library://asset/asset.JPG?id=DCF5C6E5-B4F4-4E61-9C4B-CC63E104BF2B&ext=JPG