Search code examples
iosobjective-cimagephasset

Convert NSUrl to PHAsset iOS 8


I have a list of pictures in NSUrl format that I want to convert to PHAsset list of object.

How can I perform it?

My goal is to upload a list of pictures to my view on viewDidLoad state.

I started to work with the PHAssets library in iOS 8 and above and I notice that there isn't a easy way to save all the assets in memory when exiting from the view controller. Therefore what I did is a little conversion, i'm saving the PHAssets url as NSString object using NSUserDefaults.

Now all I need to perform is to load back the PHAssets list on the load state, to have all the selected pictures available once again on the user view.


Solution

  • After investigation, PHAsset inherits a localIdentifier property from PHObject. Basically the localIdentifier is a unique string that persistently identifies the object which can later be stored in memory using NSUserDefaults since it's an NSString object.

    What i did is extract this property and saved it into memory like this:

    NSMutableArray* pbjects = [[NSMutableArray alloc]init];
    for(id key in keys)
    {
       PHAsset *asset = [dic objectForKey:key];
       [pbjects addObject:asset.localIdentifier];
    }
    
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];[defaults setObject:pbjects forKey:KEY_PICTURES_LIST];
    [defaults synchronize];
    

    When I wanted to extract the PHAsset array I used the following lines:

    PHFetchResult* assets =[PHAsset fetchAssetsWithLocalIdentifiers:picsUrls options:nil];
    

    Then I iterate on the assets result and upload all my PHAsses objects like a regular NSArray. Information about it can be found here