2015-09-21 58 views
14

PHAssetを使用して元のファイル名を取得する方法はありますか?PHAsset元のファイル名を取得

次のコードを使用してファイル情報を抽出します。

[[PHImageManager defaultManager] requestImageDataForAsset:asset options:requestOption resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { 
    entity.fileUrl = [info objectForKey:@"PHImageFileURLKey"]; 
    entity.filename = [[NSFileManager defaultManager] displayNameAtPath:[ entity.fileUrl path]]; 
    }]; 

しかし、それは元の名前が、私はちょうどAppleの公式ドキュメントをチェックしたフォーマット「img_123」 で名前を返しません。新しいクラスPHAssetResourceとプロパティoriginalFilenameが導入されており、iOS 9以降で利用できます。問題は、Photosフレームワークに基づいた画像ピッカーライブラリCTAssetsPickerControllerを使用していることです。ピックした画像をPHAssetオブジェクトとして返します。 PS。私は、iOS 8と互換性のあるソリューションを探しています:)。 ありがとうございました!

答えて

36

iOS 8では、あなたの解決策はファイル名を取得する権利(そして唯一のアプローチ)です。 iOSの9オン

この作品:

NSArray *resources = [PHAssetResource assetResourcesForAsset:asset]; 
NSString *orgFilename = ((PHAssetResource*)resources[0]).originalFilename; 
+0

私は、iOS 8または以前のバージョンのために何をすべきでしょうか? – iHart

2

たぶん、あなたは、メソッドを使用することができ、それがiOS8上に動作します:1行のコードでファイル名を取得する

[asset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) { 

    CIImage *fullImage = [CIImage imageWithContentsOfURL:contentEditingInput.fullSizeImageURL]; 
    NSLog(@"%@",contentEditingInput.fullSizeImageURL);//get url 
    NSLog(@"%@", fullImage.properties.description);//get {TIFF}, {Exif} 
}]; 
+0

ありがとうございます。私は受け入れ答えで提案されているアプローチを使用していました。しかし、ソース(ヘッダファイル)に掘った後、私はアプローチと同様のあなたを使用することができますことを発見しました – ProblemSlover

2

ショート方法。 Assetにはファイル名にアクセスするためのプロパティがあります。

NSString*FileName=[asset valueForKey:@"filename"]; 
NSLog(@"File name %@",FileName); 

Its done. 

Note: Accepted answer takes lots of time to load a phasset but it works.