之前写了一个小demo,功能是获取相册中的某张图片并将此图片写入到本地,然后再从本地将此图片取出显示出来。有人会说这是干嘛啊?存进去再取出来。。。我这样做是为了将来上传图片的时候能用,如我们的上传头像功能。首先我们得选取相册中的图片,然后上传到远程服务器上。在上传图片的过程中,我们首先就得从本地取出图片。
可我却遇到了问题,在模拟器上取图片的时候是完全可以的,可当在真机上的时候就出现了问题。
对比图
模拟器上:
真机上:
遇到这种问题我实在不知道该怎么百度,于是去向他人请教。还是自己太菜,经高手指点才明白,原来是保存的路径有问题。
原代码:
#pragma mark 保存图片到document
- (void)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName
{
NSData * imageData = UIImageJPEGRepresentation(tempImage, 0.5); // 对图片进行了压缩
NSString * fullPathToFile = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@"/%@" ,imageName]];
// and then we write it out
[imageData writeToFile:fullPathToFile atomically:NO];
// 将存入到沙盒的图片再取出来,目的是为了进行上传
NSLog(@"fullPathToFile:%@", fullPathToFile);
// 二进制的数据就可以进行上传
UIImage * image = [UIImage imageWithContentsOfFile:fullPathToFile];
_image = image;
}
修改后的代码:
#pragma mark 保存图片到document
- (void)saveImage:(UIImage *)tempImage WithName:(NSString *)imageName
{
NSData * imageData = UIImageJPEGRepresentation(tempImage, 0.5); // 对图片进行了压缩
NSString * fullPathToFile = [NSHomeDirectory() stringByAppendingString:[NSString stringWithFormat:@“/Documents/%@" ,imageName]];
// and then we write it out
[imageData writeToFile:fullPathToFile atomically:NO];
// 将存入到沙盒的图片再取出来,目的是为了进行上传
NSLog(@"fullPathToFile:%@", fullPathToFile);
// 二进制的数据就可以进行上传
UIImage * image = [UIImage imageWithContentsOfFile:fullPathToFile];
_image = image;
}
还是保存路径的问题。沙盒基本路径分为Documents、Library、temp,在本目录层同一级不能自定义目录,系统不允许,可以随便存到这三个目录层的子集里。