Jus*_*tin 5 iphone offline objective-c ipad ios
我们的iPad应用程序可以显示文档并在需要时将其保存在线下 我有一个名为DocumentViewController的QLPreviewController子类(从现在起名为DVC)来显示它们.
应用程序的工作流程: - 用户单击文档的名称,然后按下DVC以显示文档. - DVC离线下载文件并在完成后显示.(因此,下载HTTP URL,脱机存储,并返回脱机URL)
奇怪的是,只有PDF文件正在使用脱机URL,其余的崩溃..(虽然它适用于在线链接)
我做了一些测试,当我把文件://放在离线链接之前,应用程序没有崩溃,但DVC给我提供了一些关于文件的信息(就像它是一个excel 97-2004文档).
所以一些信息被转移,但我无法弄清楚问题是什么.
这里有一些截图,然后是一些代码.
代码: 请注意,Document是一个模型类,其文档属性包括id,name,file type和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]]];
}
Run Code Online (Sandbox Code Playgroud)
如果需要更多代码,请说.
编辑:
记录通过'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
Run Code Online (Sandbox Code Playgroud)
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.
Run Code Online (Sandbox Code Playgroud)
编辑:
webview无法使用本地网址.PDF很好,但office文件给出了一条消息"无法读取文档,文件格式无效".iWorks文档提供与quicklook相同的错误.我认为它在格式的保存和加载的某个地方,我把它们作为NSDATA使用但是之后没有提示iPad看它是否是例如word文档(只有扩展名).
我们终于找到了解决方案!
我是对的,问题出在保存文档上。
我需要更改保存方法:
+ (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;
}
Run Code Online (Sandbox Code Playgroud)
因此,使用文件管理器而不是密钥归档器保存它。
归档时间: |
|
查看次数: |
3130 次 |
最近记录: |