Сохранение и получение изображения в коллекцию Просмотр

Я сохранил изображение в пути к каталогу nsdocument и словаре в синглтон-классе, и я хочу получить эти изображения из словаря или каталога документов и загрузить их в виде коллекции. Я попытался, то, что я получаю, это то же самое изображение, копирует.. вот мой код..

 -(IBAction)takephoto:(id)sender
   {
   tapCount += 1;
   AVCaptureConnection *videoConnection  = nil;
   for(AVCaptureConnection *connection in StillImageOutput.connections)
   {
    for(AVCaptureInputPort *port in  [connection inputPorts])
    {
        if ([[port mediaType] isEqual:AVMediaTypeVideo]){
            videoConnection =connection;
            break;

        }
    }
}


[StillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error){


    if (imageDataSampleBuffer!=NULL) {

        NSData *imageData =[AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];


        self.image = [ UIImage imageWithData:imageData];
        int x = arc4random() % 100;
        NSTimeInterval secondsSinceUnixEpoch = [[NSDate date]timeIntervalSince1970];

        self.UniqueImageName = [NSString stringWithFormat:@"%@_%d_%d",self.siteName,x,(int)secondsSinceUnixEpoch];

       [[SingletonImage singletonImage]SaveImageInNSdocumentAndCache:self.image withImageName:self.UniqueImageName];
         //reloading the collection view
        [self.collection_View reloadData];

Мой синглтон-класс

      #import "SingletonImage.h"

     @implementation SingletonImage



      - (id)init
         {
self = [super init];
if ( self )
{
    self.arrayDict = [[NSMutableArray alloc] init];
   self.imageDict = [[NSMutableDictionary alloc]init];
      }
return self;
  }

  +(instancetype)singletonImage
   {
static SingletonImage *singletonImage;

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{
    singletonImage = [[SingletonImage alloc]init];


});
return singletonImage;}

// Сохранение изображения в массив словарей и путь к каталогу nsdocument

 -(void)SaveImageInNSdocumentAndCache:(UIImage *)image  withImageName:(NSString *)str
  {

//Saving image in array of dictionaries

[self.imageDict setObject:image forKey:str];

[self.arrayDict insertObject:self.imageDict atIndex:0];


 //Saving image in nsdocumnet directory path
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = paths.firstObject;
NSData *imageData = UIImagePNGRepresentation(image);

NSString *imageFolder = @"Photos";

NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];

[dateFormat setDateFormat:@"yyyMMddHHmmss"];
   NSString *imagePath = [NSString stringWithFormat:@"%@/%@",documentDirectory,imageFolder];

BOOL isDir;
NSFileManager *fileManager= [NSFileManager defaultManager];
if(![fileManager fileExistsAtPath:imagePath isDirectory:&isDir])
    if(![fileManager createDirectoryAtPath:imagePath withIntermediateDirectories:YES attributes:nil error:NULL])
        NSLog(@"Error: folder creation failed %@", documentDirectory);

[[NSFileManager defaultManager] createFileAtPath:[NSString stringWithFormat:@"%@/%@", imagePath, str] contents:nil attributes:nil];
[imageData writeToFile:[NSString stringWithFormat:@"%@/%@", imagePath, str] atomically:YES];

}

// Предоставляем изображение, если оно есть в словаре

       - (UIImage *)ProvideImage:(NSString *)text {

UIImage *Savedimage;

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:text];

if ([self.imageDict objectForKey:text]) {

    Savedimage = [self.imageDict objectForKey:text];
    }

    else if ([[NSFileManager defaultManager]fileExistsAtPath:filePath])
{

    Savedimage = [UIImage imageWithContentsOfFile:filePath];

    NSLog(@"%@",Savedimage);

        //Savedimage =
        NSLog(@"File exists at the path");

    }

    else

    {
        NSLog(@"Image doesnot exist");

    }
    return Savedimage;}

    -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
    {

   CollectionViewCell *Cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];


//Loading images




UIImage *savedImage = [[SingletonImage singletonImage]ProvideImage:self.UniqueImageName];

Cell.image_View.image =savedImage;

return cell;}

Я получаю одно и то же изображение несколько раз. Пожалуйста, помогите сделать это..

Заранее спасибо!!!

1 ответ

Вы должны действительно использовать SDImageCache - это очень легко

#import <SDWebImage/UIImageView+WebCache.h>

Хранить изображение во встроенном словаре Cache:

[[SDImageCache sharedImageCache] storeImage:image forKey:@"image1"];

восстановить изображение, как это всякий раз, когда:

SDImageCache *imageCache = [SDImageCache sharedImageCache];
NSString *key = @"image1"
[imageCache queryDiskCacheForKey:key done:^(UIImage *image , SDImageCacheType cacheType) {
     if (image)
     {
         view.image = image;
     }
     else
     {
         view.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:key]]];
     }
}];

Это означает, что вы можете хранить изображения на ранней стадии, особенно если вы загружаете их из Интернета.

Другие вопросы по тегам