我将图像存储在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;}
我多次获得相同的图像。请帮助我做这个..
提前致谢!!!
答案 0 :(得分:0)
你应该真的使用SDImageCache - 这很容易
#import <SDWebImage/UIImageView+WebCache.h>
将图像存储在内置缓存字典中:
[[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]]];
}
}];
这意味着您可以尽早存储图像 - 尤其是当您从互联网上下载图像时。