gpt4 book ai didi

iphone - 如何让 QuickLook 显示脱机文件?

转载 作者:可可西里 更新时间:2023-11-01 04:36:47 25 4
gpt4 key购买 nike

我们的 iPad 应用程序可以显示文档并在需要时离线保存它们。我有一个名为 DocumentViewController(从现在开始命名为 DVC)的 QLPreviewController 子类用于显示它们。

应用程序的工作流程:- 用户点击文档名称,DVC 被推送以显示该文档。- DVC 离线下载文件并在完成后显示。 (所以下载HTTP URL,离线存储,返回一个离线URL)

奇怪的是,只有 PDF 文件可以使用离线 URL,其余的会崩溃..(尽管它可以使用在线链接)

我做了一些测试,当我将 file://放在离线链接之前时,应用程序不会崩溃,但 DVC 会给我一些关于该文件的信息(比如它是一个 excel 97-2004 文档)。

因此传输了一些信息,但我无法弄清楚问题是什么。

这里是一些截图,然后是一些代码。

enter image description here

代码:请注意,Document 是一个模型类,具有 id、名称、文件类型和 url 等文档属性。

//DVC QLPreviewController dataSource method for returning url
- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger)index
{
[SaveHelper saveDocumentFileAndPropertyWithDocument:document];

//[SaveHelper getDocumentFileWithDocument:document]; without file://
//if I return document.documentUrl it is working with all files except iworks files)
return [SaveHelper getDocumentFileAsPathWithDocument:document]; //with file://
}

//SaveHelper methods
+ (NSString *)documentFilePathWithDocument:(Document *)document
{
return [[self documentFilePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%d.%@", DOCUMENT_FILE_PREFIX, document.documentId, document.documentType]];
}

+ (NSURL *)saveDocumentFileAndPropertyWithDocument:(Document *)document
{
if([self saveDocumentPropertyWithDocument:document])
{
return [self saveDocumentFileWithDocument:document];
}

return nil;
}

+ (NSURL *)saveDocumentFileWithDocument:(Document *)document
{
NSData *data = [NSData dataWithContentsOfURL:document.documentURL];

NSString *fullPath = [self documentFilePathWithDocument:document];

if([[NSKeyedArchiver archivedDataWithRootObject:data] writeToFile:fullPath atomically:YES])
{
return [NSURL fileURLWithPath:fullPath];
}

return nil;
}

+ (NSURL *)getDocumentFileWithDocument:(Document *)document
{
return [NSURL fileURLWithPath:[self documentFilePathWithDocument:document]];
}

+ (NSURL *)getDocumentFileAsPathWithDocument:(Document *)document
{
return [NSURL fileURLWithPath:[@"file://" stringByAppendingPathComponent:[[self getDocumentFileWithDocument:document] absoluteString]]];
}

如果需要更多代码,请直接说。

编辑:

当记录通过“getDocumentFileAsPathWithDocument”方法传递的 URL 时:

url: file:/var/mobile/Applications/xx-xx/Documents/documentFiles/file_20.pdf
url: file:/var/mobile/Applications/xx-xx/Documents/documentFiles/file_80.docx

PDF 文件有效而 docx 无效

当我尝试从本地存储加载图像 (jpg) 时出现黑屏并显示此错误消息:

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 中的文件(.pages 扩展名)不是实际文件,它们是,即包含文件并在 Finder 中显示为单个项目的目录(在 Finder 中查找 .pages 文件,对-单击它并选择“显示内容”)。下载 .pages 文件实际上就像下载一个目录:它取决于 Web 服务器您得到什么样的结果,但它很可能是一个错误页面。

您可以检测到它是一个 .pages 文件并尝试手动下载其所有内容,但是您必须研究文件的结构以查看是否可行,因为您不太可能请求来自 Web 服务器的目录。

.ppt 和 .xls 文件的结果对我来说看起来很正常;我认为 iPad 根本不可能预览 MS Office 文档。

编辑:抱歉,我刚读到 iOS 可以预览 MS Office 文档。也许文件在下载过程中以某种方式损坏了?您是否尝试将下载位置设置为应用程序的文档文件夹并启用 iTunes 文件共享?通过这种方式,您可以下载一些文档,将它们从您的设备中取出,然后尝试在您的 PC 上打开它以查看是否有效。

关于iphone - 如何让 QuickLook 显示脱机文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7038438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com