【问题标题】:Persistent image storage in iOSiOS 中的持久图像存储
【发布时间】:2015-07-08 15:09:31
【问题描述】:

我使用这种方法来存储图像,据我了解,这种方法可以持久地存储数据。问题是当我重新启动模拟器时,图像已经消失/无法加载。 无论如何,这是代码:

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

【问题讨论】:

  • “重启模拟器”是什么意思?以及如何保存 imagePath?
  • 我在 iPhone 6 的模拟器中运行该应用程序,该模拟器包含在 Xcode 中,我的意思是我关闭模拟器并再次运行该应用程序。我将 imagePath 保存在 NSUserDefaults 中。

标签: ios image storage nsuserdefaults


【解决方案1】:
NSString *imagePath = [documentDirectory stringByAppendingFormat:imageName]; 

我觉得应该是

NSString *imagePath =    [documentDirectory stringByAppendingPathComponent:imageName]; 

【讨论】:

    【解决方案2】:

    这一行

    NSString *imageName = [NSString stringWithFormat:@"%@%@", account,@"Banner.png"];

    少了一个/,应该是

    NSString *imageName = [NSString stringWithFormat:@"/%@%@", account,@"Banner.png"];

    您正在目录中写入图像名称“DocumentsxxxxBanner.png

    /Users/xxxx/Library/Developer/CoreSimulator/Devices/D523E2E5-0B28-4D0D-8187-67D50A628481/data/Containers/Data/Application/82F36569-C3C0-46D9-AF60-044F7B484724/

    而不是目录中名为“xxxxBanner.png”的图片

    /Users/xxxx/Library/Developer/CoreSimulator/Devices/D523E2E5-0B28-4D0D-8187-67D50A628481/data/Containers/Data/Application/82F36569-C3C0-46D9-AF60-044F7B484724/文档强>

    干杯

    【讨论】:

    • 感谢您的回复。但它仍然无法正常工作。
    • 在这里工作,您是否在应用的 Documents 目录中看到文件?
    • 我检查了它是否被这个函数保存了:[[NSFileManager defaultManager] fileExistsAtPath:bannerPath];它返回假。所以它没有得到正确保存。知道为什么吗?
    • 请用查找器检查硬盘上的文件。 [[NSFileManager defaultManager] fileExistsAtPath:bannerPath] 为我返回 YES 以获取信息。
    • 它不存在。我相信问题是每次我运行应用程序时,应用程序都会安装在不同的目录中。
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2012-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多