Search code examples
iphoneobjective-cios5alassetslibrarynsdocumentdirectory

How to display all images from NSDocument directory


First i selected images from photo library to ALAsset Library and after that i stored images in document directory from ALAsset library path.

i am using this code to store images in document directory from ALAsset Library.... Its working perfect... Now i want to display all images which are stored in document directory in table view.. how can i do this??? can anybody help me??

Code for importing images from ALAsset Library to NSdocument directory

for (int j=0; j<[assetArray count]; j++) {

ALAssetRepresentation *representation = [[assetArray objectAtIndex:j] defaultRepresentation];
NSString* filename = [documentPath stringByAppendingPathComponent:[representation filename]];

[[NSFileManager defaultManager] createFileAtPath:filename contents:nil attributes:nil];
NSOutputStream *outPutStream = [NSOutputStream outputStreamToFileAtPath:filename append:YES];
[outPutStream open];

long long offset = 0;
long long bytesRead = 0;

NSError *error;
uint8_t * buffer = malloc(131072);
while (offset<[representation size] && [outPutStream hasSpaceAvailable]) {
    bytesRead = [representation getBytes:buffer fromOffset:offset length:131072 error:&error];
    [outPutStream write:buffer maxLength:bytesRead];
    offset = offset+bytesRead;
}
[outPutStream close];
free(buffer);

}

After that i got the contents of directory using this code:

 NSFileManager *manager = [NSFileManager defaultManager];
fileList = [manager directoryContentsAtPath:newDir];

Its also working... but now when i want to display images from document directory. It doesn't show anything....

 setImage.image=[UIImage imageNamed:[filePathsArray objectAtIndex:0]];

Can anybody help, where is the problem????? - I have one doubt: *Is it the right way to import images from ALAsset Library to document directory???


Solution

  • This answer is about how to retrieve images from documents directory and displaying them to UITableView.....

    first of all you have to get all images from your documents directory to an array....

    -(void)viewWillAppear:(BOOL)animated
    {
    
        arrayOfImages = [[NSMutableArray alloc]init];
    NSError *error = nil;
    
    
        NSString *stringPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
    
        NSArray *filePathsArray = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath: stringPath  error:&error];
    
      for(int i=0;i<[filePathsArray count];i++)
      {
          NSString *strFilePath = [filePathsArray objectAtIndex:i];
          if ([[strFilePath pathExtension] isEqualToString:@"jpg"] || [[strFilePath pathExtension] isEqualToString:@"png"] || [[strFilePath pathExtension] isEqualToString:@"PNG"]) 
          {
             NSString *imagePath = [[stringPath stringByAppendingString:@"/"] stringByAppendingString:strFilePath];
             NSData *data = [NSData dataWithContentsOfFile:imagePath];
            if(data)
            {
              UIImage *image = [UIImage imageWithData:data];
              [arrayOfImages addObject:image];
            }
          }
    
      }
    
    }
    

    after that - using this array you can show the image in uitableview cell remember dont add the table view on your view untill your array is fill.....

    #pragma mark - UItableViewDelegate methods
    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [arrayOfImages count];
    }
    
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tablView dequeueReusableCellWithIdentifier:CellIdentifier];
        if(cell == nil)
        {
            cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }
        //adjust your imageview frame according to you
        UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0.0, 0.0, 470.0, 80.0)];
    
        [imageView setImage:[arrayOfImages objectAtIndex:indexPath.row]];
        [cell.contentView addSubview:imageView];
        return cell;
    

    }

    Now run it will work ..