我使用此方法来存储图像,据我所知,此方法持久存储数据。问题是,当我重新启动模拟器时,图像消失/无法加载。 无论如何,这里是代码:
- (NSString *)saveImage:(NSMutableString*)account{
NSString *dir=[NSString stringWithFormat:@"http://example.com"];
NSURL *url=[NSURL URLWithString:dir];
NSData *imageData = UIImagePNGRepresentation([UIImage imageWithData:[NSData dataWithContentsOfURL:url]]);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
NSString *imageName = [NSString stringWithFormat:@"%@%@", account,@"Banner.png"];
NSString *imagePath = [documentDirectory stringByAppendingFormat:imageName];
NSLog((@"pre writing to file"));
NSError *writeError = nil;
if(![imageData writeToFile:imagePath options:NSDataWritingAtomic error:&writeError]){
NSLog(@"%@: Error saving image: %@",[self class], [writeError localizedDescription]);
}
else{
NSLog(@"the cachedImagePath is %@", imagePath);
return imagePath;
}
return NULL;
}
这是用于加载图像的方法:
[UIImage imageWithContentsOfFile:bannerPath]
bannerPath是从存储在NSUserDefaults中的保存方法返回的imagePath。
我做错了吗?我该如何解决? 谢谢。
编辑:如果文件存在,我使用以下方法检查:
[[NSFileManager defaultManager] fileExistsAtPath:bannerPath];
我返回false。
答案 0 :(得分:1)
NSString *imagePath = [documentDirectory stringByAppendingFormat:imageName];
i think should be
NSString *imagePath = [documentDirectory stringByAppendingPathComponent:imageName];
答案 1 :(得分:0)
这一行
NSString *imageName = [NSString stringWithFormat:@"%@%@", account,@"Banner.png"];
缺少一个/,它应该是
NSString *imageName = [NSString stringWithFormat:@"/%@%@", account,@"Banner.png"];
您在目录
中写了一个图像名称“ DocumentsxxxxBanner.png ”/用户/ XXXX /库/开发商/ CoreSimulator /设备/ D523E2E5-0B28-4D0D-8187-67D50A628481 /数据/容器/数据/应用/ 82F36569-C3C0-46D9-AF60-044F7B484724 /
而不是目录中名为“ xxxxBanner.png ”的图片
/用户/ XXXX /库/开发商/ CoreSimulator /设备/ D523E2E5-0B28-4D0D-8187-67D50A628481 /数据/容器/数据/应用/ 82F36569-C3C0-46D9-AF60-044F7B484724 / <强>文档强>
干杯