我使用下面的代码在本地保存图像。它没有任何错误,我可以预览传入的图像。唯一的问题是图像似乎永远不会被保存或出现在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中引用它时,它不会为该图像加载任何内容。
答案 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);
}