保存的图像不会出现在文件目录中

时间:2015-10-15 23:18:19

标签: objective-c uiimage nsdata

我使用下面的代码在本地保存图像。它没有任何错误,我可以预览传入的图像。唯一的问题是图像似乎永远不会被保存或出现在Images目录中。我使用iExplorer进行双重检查,我刷新了文件夹,图像仍然不存在。你的想法很感激。

// I can preview this UIImage and it appears as expected
UIImage *image    = [UIImage imageWithData:responseObject]; //responseImage is an image from online 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *docs = [paths objectAtIndex:0];
NSString* path =  [docs stringByAppendingFormat:@"/Images/image1.jpg"];

NSData* imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, .8)];
NSError *writeError = nil;

if(![imageData writeToFile:path options:NSDataWritingAtomic error:&writeError]) {
    //This never fires, so you would think the image would have saved, but that does not appear to be the case!
    NSLog(@"%@: Error saving image: %@", [self class], [writeError localizedDescription]);
}

我也check to see if the file exists programmatically,显然确实存在。但是,当我尝试在UIWebview中引用它时,它不会为该图像加载任何内容。

2 个答案:

答案 0 :(得分:1)

请注意,NSFileManagers使用NSString路径来读取/写入文件,但UIWebViews使用NSURLs。为了将文件加载到UIWebView,您需要将NSString路径转换为NSURL文件网址。

所以不要看起来像:

/Documents/Path/To/File.png

需要

file:///Documents/Path/To/File.png

我认为正确的方法是使用[NSURL fileURLWithPath:]方法。

所以它看起来像这样:

NSFileManager* fileManager = [NSFileManager defaultManager];
NSString* path; //However you got your path here

if([fileManager fileExistsAtPath:path])
{
    NSURL* fileURL = [NSURL fileURLWithPath:path];
    NSURLRequest* request = [NSURLRequest requestWithURL: fileURL];
    [_myWebView loadRequest:request];
}

答案 1 :(得分:0)

这个评论太长了,所以我将其作为答案发布。

我不确定你的if语句。如果文件操作失败,它确实返回BOOL NO,但我不确定“操作失败”意味着什么。仅仅因为没有写出文件并不一定意味着操作失败。所以最好检查NSError本身。

不检查![writeToFile],而是运行不带if语句的行,然后选中if(writeError != nil)。如果if语句为true,则出现错误,如果是,则可以检查错误的本地化描述。

所以回顾一下,

NSError* writeError = nil;
[imageData writeToFile:path options:NSDataWritingAtomic error:&writeError];
if(writeError != nil)
{
    //Something went wrong
    NSLog("File write error: %@", writeError.localizedDescription);
}