在iOS应用中保存图像,在互联网连接可用时加载一次

时间:2014-05-19 06:52:46

标签: ios uiimageview

我正在创建一个应用程序,其中我保存了一些用户详细信息和他们的消息,这个应用程序类似于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个用户个人资料图像,并且当没有可用的互联网连接时,不会显示重复的图像。任何人都可以建议如何保存所有用户个人资料图像,即使他们被重复因此,当没有可用的互联网连接时,它们会显示出来。提前谢谢。

1 个答案:

答案 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;