2016-10-04 1 views
0

J'ai stocké l'image dans le chemin du répertoire nsdocument et dans le dictionnaire de la classe singleton. Je souhaite récupérer ces images dans le dictionnaire ou dans le répertoire de documents et les charger dans la vue de collection. J'ai essayé, ce que j'obtenir est la même image est reproduit .. voici mon code ..Enregistrement et récupération de l'image dans la collection Afficher

-(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]; 

Ma classe singleton

 #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;} 

// Sauver une image à un tableau de dictionnaires et répertoire NSDocument chemin

-(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]; 

}

// P ournir l'image si elle est dans le dictionnaire

 - (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;} 

j'obtenir une même image de temps multiples .please helpme pour ce faire ..

Merci d'avance !!!

+0

faire votre image votre image Nill et avant assign à la cellule –

+0

Merci, ravi.p, je veux toutes les images dans le dictionnaire de la classe singleton et que vous voulez leur montrer en mode collection – Saraswathi

+0

S'il vous plaît quelqu'un me aider – Saraswathi

Répondre

0

Vous devriez vraiment utiliser SDImageCache - il est très facile

#import <SDWebImage/UIImageView+WebCache.h>

image magasin intégré dans le dictionnaire Cache:

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

récupérer l'image comme celui-ci à chaque fois:

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]]]; 
    } 
}]; 

Cela signifie que vous pouvez stocker des images très tôt, surtout si vous les téléchargez sur Internet.