2015-09-21 6 views
14

Ich frage mich, ob es eine Möglichkeit gibt, den ursprünglichen Dateinamen mit PHAsset zu erhalten?PHAsset erhalten ursprünglichen Dateinamen

Ich verwende den folgenden Code, um die Datei Info zu extrahieren.

[[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]]; 
    }]; 

Es ist jedoch nicht zurück ursprüngliche Namen, aber den Namen im Format „img_123“ ich nur offiziellen Apfel docs überprüft habe. Es wurde eine neue Klasse PHAssetResource und die Eigenschaft originalFilename eingeführt, die in iOS 9+ verfügbar ist. Das Problem ist, dass ich die Bildauswahlbibliothek CTAssetsPickerController verwende, die auf dem Photos-Framework basiert; es gibt das ausgewählte Bild als Objekt PHAsset zurück. PS. Ich suche nach der Lösung, die mit iOS 8 kompatibel ist :). Vielen Dank!

Antwort

36

Auf iOS 8 ist Ihre Lösung der richtige (und einzige Ansatz), um überhaupt einen Dateinamen zu erhalten.

Auf iOS 9 dies funktioniert:

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

was soll ich für ios 8 oder vorherige Version tun? – iHart

2

Vielleicht können Sie die Methode verwenden, ist es oben iOS8 funktioniert:

[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

Hey danke. Ich habe einen Ansatz verwendet, der in der akzeptierten Antwort vorgeschlagen wurde. aber nachdem ich in der Quelle (Header-Dateien) gegraben habe, habe ich festgestellt, dass ich ähnlichen Ansatz verwenden kann – ProblemSlover

2

Kurzer Weg Dateinamen mit einer Zeile Code zu erhalten. Asset hat eine Eigenschaft für den Zugriff auf den Dateinamen.

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. 
Verwandte Themen