Iphone 如何让QuickLook显示脱机文件?
我们的iPad应用程序可以显示文档并在需要时离线保存。 我有一个名为DocumentViewController(从现在起名为DVC)的QLPreviewController子类来显示它们 应用程序的工作流程: -用户单击文档的名称,然后按下DVC以显示文档。 -DVC离线下载文件,并在完成后显示。 (因此HTTP URL被下载、离线存储,并返回一个离线URL) 奇怪的是,只有PDF文件与脱机URL一起工作,其余文件崩溃。。(不过它可以与在线链接一起使用) 我做了一些测试,当我将file://放在脱机链接之前时,应用程序没有崩溃,但DVC正在向我提供有关该文件的一些信息(比如它是一个excel 97-2004文档) 所以一些信息被传输了,但我不知道问题出在哪里 这里是一些截图和之后的一些代码 代码: 请注意,Document是一个模型类,具有id、名称、文件类型和url等文档属性 PDF文件在哪里工作而docx不在哪里 当我尝试从本地存储加载图像(jpg)时,我会看到一个黑屏,显示以下错误消息:Iphone 如何让QuickLook显示脱机文件?,iphone,objective-c,ios,ipad,offline,Iphone,Objective C,Ios,Ipad,Offline,我们的iPad应用程序可以显示文档并在需要时离线保存。 我有一个名为DocumentViewController(从现在起名为DVC)的QLPreviewController子类来显示它们 应用程序的工作流程: -用户单击文档的名称,然后按下DVC以显示文档。 -DVC离线下载文件,并在完成后显示。 (因此HTTP URL被下载、离线存储,并返回一个离线URL) 奇怪的是,只有PDF文件与脱机URL一起工作,其余文件崩溃。。(不过它可以与在线链接一起使用) 我做了一些测试,当我将file://放
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3.5 (8L1)/Symbols/System/Library/Frameworks/QuickLook.framework/DisplayBundles/Image.qldisplay/Image (file not found).
warning: No copy of Image.qldisplay/Image found locally, reading from memory on remote device. This may slow down the debug session.
编辑:
webview也不适用于本地URL。PDF可以,但office文件会显示一条消息“无法读取文档,文件格式无效”。iWorks文档给出了与quicklook相同的错误。我认为这是格式保存和加载的地方,我将它们保存为NSDATA,但在此之后,没有提示iPad查看它是否是word文档(仅是扩展名)。您还没有发布下载代码,但我相信问题就在那里。页面(.Pages extension)中的文件不是实际的文件,而是捆绑包,即包含文件并在Finder中显示为单个项目的目录(在Finder中查找.Pages文件,右键单击它并选择“显示内容”)。下载一个.pages文件实际上就像下载一个目录:这取决于web服务器您得到的结果,但很可能是一个错误页面 您可以检测到它是一个.pages文件,并尝试手动下载它的所有内容,但您必须研究文件的结构,看看这是否可行,因为您不太可能从web服务器请求目录的内容 在我看来,.ppt和.xls文件的结果是正常的;我认为iPad根本不可能预览MS Office文档 编辑:抱歉,我刚读到iOS可以预览MS Office文档。也许文档在下载过程中被破坏了?您是否尝试将下载位置设置为应用程序的“文档”文件夹并启用iTunes文件共享?通过这种方式,你可以下载一些文档,将它们从你的设备上取下,然后尝试在你的电脑上打开,看看是否有效
首先,使用此代码确保文档在那里,因为我认为错误是由文档路径引起的
NSFileManager *fileManager=[NSFileManager defaultManager];
if([fileManager fileExistsAtPath:fullPath]){
NSLog(@"%@ exsit! ",fullPath);
}else{
NSLog(@"%@ not exsit! ",fullPath);
}
我们终于找到了解决办法 我是对的,问题在于保存文档 我需要在中更改保存方法:
+ (NSURL *)saveDocumentFileWithDocument:(Document *)document
{
NSData *data = [NSData dataWithContentsOfURL:document.documentURL options:NSDataReadingUncached error:nil];
NSString *fullPath = [self documentFilePathWithDocument:document];
if([[NSFileManager defaultManager] createFileAtPath:fullPath contents:data attributes:nil])
{
return [NSURL fileURLWithPath:fullPath];
}
//OLD CODE
// if([[NSKeyedArchiver archivedDataWithRootObject:data] writeToFile:fullPath atomically:YES])
// {
// return [NSURL fileURLWithPath:fullPath];
// }
return nil;
}
因此,请使用filemanager而不是keyedarchiver保存它。如果其中任何一个存在相同的问题,即使您完成了上述所有操作。 (当我从谷歌硬盘下载一些文件时,我也遇到了同样的问题。) 试试这个 将文件扩展名的“x”结尾作为格式的新版本进行识别。 (它仅适用于“doc”和“ppt”文件,不适用于“xls”文件) 是的,我知道这不是解决这个问题的合适方法,但是 值得一试 相信我,我什么都试过了
希望您能提供帮助。您是否尝试过使用[NSURL fileURLWithPath:…]呢?您处理文件URL的方式非常脆弱。我已将其更改为“return[NSURL fileURLWithPath:fullPath];”(我将上面的代码更新为),但我仍然遇到相同的问题。不,webview也不能处理本地URL。PDF可以,但office文件会显示一条消息“无法读取文档,文件格式无效”。iWorks文档给出了与quicklook相同的错误。我认为它是在保存和加载格式的某个地方,我将它们保存为NSDATA,但在这之后,没有提示iPad查看它是否是word文档(仅扩展名)。还有其他提示吗?看起来您找到了解决方案,问题在于保存文件。我在邮件中添加了一些下载代码。(加上编辑,我用webview测试它)
NSFileManager *fileManager=[NSFileManager defaultManager];
if([fileManager fileExistsAtPath:fullPath]){
NSLog(@"%@ exsit! ",fullPath);
}else{
NSLog(@"%@ not exsit! ",fullPath);
}
+ (NSURL *)saveDocumentFileWithDocument:(Document *)document
{
NSData *data = [NSData dataWithContentsOfURL:document.documentURL options:NSDataReadingUncached error:nil];
NSString *fullPath = [self documentFilePathWithDocument:document];
if([[NSFileManager defaultManager] createFileAtPath:fullPath contents:data attributes:nil])
{
return [NSURL fileURLWithPath:fullPath];
}
//OLD CODE
// if([[NSKeyedArchiver archivedDataWithRootObject:data] writeToFile:fullPath atomically:YES])
// {
// return [NSURL fileURLWithPath:fullPath];
// }
return nil;
}