我正在创建一个应用程序,其中我保存了一些用户详细信息和他们的消息,这个应用程序类似于Facebook或许多其他我的意思是第一次来自api的数据,然后我将它存储在我们的本地数据库。因此,一次加载的数据存储在本地数据库中,用户可以在没有互联网连接的情况下看到它。我在sqlite数据库中存储消息和详细信息,它可以正常处理文本消息并保存用户的详细信息。
问题是我想在本地存储中保存包含用户详细信息的个人资料图片,我不想将其保存在数据库中但是将其保存到app目录中,因为我使用下面的代码
UIImageView *ProfileImage = [[UIImageView alloc]initWithFrame:CGRectMake(5, 1, 30, 30)];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
NSData *imageData =[NSData dataWithContentsOfURL:[NSURL URLWithString: [NSString stringWithFormat:@"http://ton.hiitap.com/p/%@",[TOUSERUDID objectAtIndex:i]]]];
NSString *imagePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@.png",[TOUSERUDID objectAtIndex:i] ]];
[imageData writeToFile:imagePath atomically:YES];
UIImage* img = [UIImage imageWithData:imageData];
NSData *pngData = UIImagePNGRepresentation(img);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0]; //Get the docs directory
NSString *filePath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@-%d.png",[TOUSERUDID objectAtIndex:i],i]]; //Add the file name
[pngData writeToFile:filePath atomically:YES];
pngData = [NSData dataWithContentsOfFile:filePath];
UIImage *img2 = [UIImage imageWithData:pngData];
dispatch_async(dispatch_get_main_queue(),^{
ProfileImage.image=img2;
});
});
此代码的问题是它只保存2个用户个人资料图像,并且当没有可用的互联网连接时,不会显示重复的图像。任何人都可以建议如何保存所有用户个人资料图像,即使他们被重复因此,当没有可用的互联网连接时,它们会显示出来。提前谢谢。
答案 0 :(得分:0)
如果您正在使用核心数据,则可以在用户模型中创建一个列为例如userImage的列,其类型为NSData 并且您可以将图像转换为NSData,如下所示:
如果是PNG图片:
UIImage *image = [UIImage imageNamed:@"imageName.jpg"];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
如果是JPG图片:
UIImage *image = [UIImage imageNamed:@"imageName.jpg"];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
你可以像这样从数据库加载图像:
NSManagedObject *selectedObject = [[self yourFetchCOntroller] objectAtIndexPath:indexPath];
UIImage *image = [UIImage imageWithData:[selectedObject valueForKey:@"image"]];
// and set this image in to your image View
yourimageView.image=image;