iOS中的持久图像存储

时间:2015-07-08 15:09:32

标签: ios image storage nsuserdefaults

我使用此方法来存储图像,据我所知,此方法持久存储数据。问题是,当我重新启动模拟器时,图像消失/无法加载。 无论如何,这里是代码:

- (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。

2 个答案:

答案 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 / <强>文档

干杯