2015-03-05 17 views

risposta

36

Creare l'assetURL sfruttando la localidentifier del PHAsset. Esempio: PHAsset.localidentifier rendimenti 91B1C271-C617-49CE-A074-E391BA7F843F/L0/001

Ora prendete i primi 32 caratteri per costruire l'assetURL, come:

assets-library://asset/asset.JPG?id=91B1C271-C617-49CE-A074-E391BA7F843F&ext=JPG

Si potrebbe modificare l'estensione JPG a seconda della UTI del bene (requestImageDataForAsset restituisce le UTI), ma nei miei test le estensioni di assetURL sembrano essere ignorate comunque.

+0

Buono. Questa relazione è documentata? Se no, dove/come l'hai scoperto? Hai appena notato che le stringhe GUID erano uguali? –

+1

Non documentato, ho visto che le stringhe GUID sono le stesse e ha senso perché sia ​​PhotoKit che AssetsLibrary funzionano con gli stessi oggetti CoreData sotto il cofano - quindi questo è solo l'UUID dell'oggetto coredata. Preferirei questo metodo per utilizzare le chiamate API private. – holtmann

+0

Bene, oggetti di scena. Terrò un po 'sul green check per una risposta documentata, poiché è quello che ho chiesto, ma questo mi ha molto sollevato. Grazie tante. –

8

Volevo essere in grado di ottenere un URL anche per una risorsa. Tuttavia, mi sono reso conto che il localIdentifier può essere conservato invece e utilizzato per recuperare il PHAsset.

PHAsset* asset = [PHAsset fetchAssetsWithLocalIdentifiers:@[localIdentifier] options:nil].firstObject; 

URL Legacy di asset possono essere convertiti utilizzando:

PHAsset* legacyAsset = [PHAsset fetchAssetsWithALAssetUrls:@[assetUrl] options:nil].firstObject; 
NSString* convertedIdentifier = legacyAsset.localIdentifier; 

(prima che venga reso obsoleto metodo ...)

-

(Grazie holtmann localIdentifier è nascosto in PHObject.)
+2

Quello che dici _ può essere vero, ma sembra solo indirettamente correlato alla domanda reale (ho pensato, chiaramente affermato). –

+0

@Clay Bridge True. Credo di aver realizzato che mi ha aiutato a risolvere il mio problema, e ho aggiunto una risposta senza ricontrollare la domanda. Scusate. – Matt

+2

Trovo che la creazione di una domanda a risposta personale separata sia un formato migliore per tutte le realizzazioni che realizzi. L'ho fatto molto, e nonostante quello che ti dicono, non sono ancora diventato cieco. :) Puoi anche collegare a questa domanda. –

-1

Come da discussione su holtmann & & Argilla Ponti, ho fatto aggiungendo il link come questo, Questa è la risposta pre ma per risparmiare tempo i post di nuovo

Upvote Quilink

PHAsset *asset = self.allPhotos[indexPath.item]; 
    NSLog(@"this is local assets =%@",asset.localIdentifier); 
    NSString *localStr=asset.localIdentifier; 
    NSRange range = [localStr rangeOfString:@"/"]; 
    NSString *newString = [localStr substringToIndex:range.location]; 
    NSString *appendedString=[NSString stringWithFormat:@"%@%@%@",@"assets-library://asset/asset.JPG?id=",newString,@"&ext=JPG"]; 
    name=[NSURL URLWithString:appendedString]; 
+0

Questo non funziona in generale. Solo per JPG –

+0

@PredragManojlovic quale errore stai affrontando? –

+0

Autore richiede una soluzione che funzioni per tutti i formati. Questo presuppone che JPG sia un'estensione. –

0

Ecco il codice di lavoro testato su iOS 11 sia il simulatore che il dispositivo

PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:nil]; 
    [result enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
     PHAsset *asset = (PHAsset *)obj; 
     [asset requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput * _Nullable contentEditingInput, NSDictionary * _Nonnull info) { 
      NSLog(@"URL:%@", contentEditingInput.fullSizeImageURL.absoluteString); 
      NSString* path = [contentEditingInput.fullSizeImageURL.absoluteString substringFromIndex:7];//screw all the crap of file:// 
      NSFileManager *fileManager = [NSFileManager defaultManager]; 
      BOOL isExist = [fileManager fileExistsAtPath:path]; 
      if (isExist) 
       NSLog(@"oh yeah"); 
      else { 
       NSLog(@"damn"); 
      } 
     }]; 
    }]; 
Problemi correlati