Search code examples
objective-ciosxcodeipadnsdocumentdirectory

Retrieve all images from NSDocumentDirectory and storing into an array


Currently i'm using these codes to save my images into NSDocumentDirectory. I use this counter as the naming convention for them.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)selectedImage editingInfo:(NSDictionary *)editingInfo 
{
  [self.popoverController dismissPopoverAnimated:YES];
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDir = [paths objectAtIndex:0];
  NSString *savedImagePath = [documentsDir stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.png", counter]];
  UIImage *image = imageView.image;
  NSData *imageData = UIImagePNGRepresentation(image);
  [imageData writeToFile:savedImagePath atomically:NO];
}

I use this method because it's easier for me to retrieve all of them by using a loop. I want to retrieve all the images from the NSDocumentDirectory so that i can display them in another view. The following codes show how i retrieve them.

-(NSMutableArray *)GetImage:(NSMutableArray *)arrayImgNames
{
  NSMutableArray *tempArray;
  for(int i=0;i<[arrayImgNames count]; i++)
  {
    NSArray *paths1 = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths1 objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent: [arrayImgNames objectAtIndex:i]];
    [tempArray addObject:[[UIImage alloc] initWithContentsOfFile:filePath]];
    return tempArray;
  }
}

However, i do not wish to use the counter as a naming convention for my images. I want to use proper names for them but if i do so, i will have to change my method of retrieving all the images.

Is there any other way that i can retrieve all images other than this method i mentioned?


Solution

  • You can retrieve files using next approach:

    NSURL *url = [[AppDelegate sharedAppDelegate] applicationDocumentsDirectory];
    NSError *error = nil;
    NSArray *properties = [NSArray arrayWithObjects: NSURLLocalizedNameKey, NSURLLocalizedTypeDescriptionKey, nil];
    
    NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:url
                      includingPropertiesForKeys:properties options:(NSDirectoryEnumerationSkipsPackageDescendants)
                      error:&error];
    

    In files paths to all files of documents directory will be stored. Next code will help you to get there names:

    NSURL *url = [files objectAtIndex:index];
    NSString *localizedName = [url lastPathComponent];