我使用vfr/reader打开PDF文件。当我打开第一个PDF文件时,我的应用程序正确打开它但当我打开另一个时,我的应用程序再次打开第一个文件。
这是我阅读PDF文件的功能
-(void)readIssue:(IssueMath *)issue {
NSString *filePath = [[issue.contentURL path] stringByAppendingPathComponent:@"Mathematics.pdf"];
NSLog(@"Read Path 1: %@ ",filePath);
ReaderDocument *document = [ReaderDocument withDocumentFilePath:filePath password:nil];
NSLog(@"Read Path 2: %@ ",document.fileURL);
ReaderViewController *readerViewController = [[ReaderViewController alloc] initWithReaderDocument:document];
readerViewController.delegate = self; // Set the ReaderViewController delegate to self
readerViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
readerViewController.modalPresentationStyle = UIModalPresentationFullScreen;
[self presentModalViewController:readerViewController animated:YES];
}
这是NSLog
输出:
2012-11-02 20:09:31.081 MAGAZINE[314:15203] Read Path 1: /Users/eakmotion/Library/Application Support/iPhone Simulator/5.0/Applications/EC25BC08-E1E7-44B6-9AD8-0A321EEAC8B6/Library/Caches/ISSUE3_2011/Mathematics.pdf
2012-11-02 20:09:31.109 MAGAZINE[314:15203] Read Path 2: file://localhost/Users/eakmotion/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/EC25BC08-E1E7-44B6-9AD8-0A321EEAC8B6/Library/Caches/ISSUE2_2011/Mathematics.pdf
我想阅读“ISSUE3_2011 / Mathematics.pdf”,但app仍然会读取第一条路径“ISSUE2_2011 / Mathematics.pdf”
为什么filePath
仍然相同?
我该如何解决这个问题?
答案 0 :(得分:3)
是的,您的解决方案有效,但如果您想跟踪所有pdf文档(例如当前页面号)
您必须为本地pdf文件指定唯一的名称。因为它将在本地设备文件夹中搜索Mathematics.plist文件以读取当前页码..
/ Users / eakmotion / Library / Application Support / iPhone Simulator / 5.0 / Applications / EC25BC08-E1E7-44B6-9AD8-0A321EEAC8B6 / Library / Caches / ISSUE3_2011 / Mathematics.pdf
file://localhost/Users/eakmotion/Library/Application%20Support/iPhone%20Simulator/5.0/Applications/EC25BC08-E1E7-44B6-9AD8-0A321EEAC8B6/Library/Caches/ISSUE2_2011/Mathematics.pdf
这些文件正在寻找相同的Mathematics.plist文件 在类ReaderDocument“unarchiveFromFileName”方法
中NSString *archivePath = [ReaderDocument applicationSupportPath]; // Application's "~/Library/Application Support" path
NSString *archiveName = [[filename stringByDeletingPathExtension] stringByAppendingPathExtension:@"plist"];
尝试修改此代码部分或为您的文件指定唯一的名称,如Mathematics_ISSUE3_2011.pdf和Mathematics_ISSUE2_2011.pdf
答案 1 :(得分:2)
我知道这个问题还有几个月的历史,但是如果有人遇到同样的问题(和我一样),我找到了解决方案。
在vfr / Reader的源代码中,找到Sources/ReaderDocument.m
文件,然后查找名为+ (ReaderDocument *)withDocumentFilePath:
的函数。
在那里,注释掉阻止文件重新加载的条件,如下所示。
+ (ReaderDocument *)withDocumentFilePath:(NSString *)filePath password:(NSString *)phrase
{
ReaderDocument *document = nil; // ReaderDocument object
document = [ReaderDocument unarchiveFromFileName:filePath password:phrase];
//if (document == nil) // Unarchive failed so we create a new ReaderDocument object
//{
document = [[ReaderDocument alloc] initWithFilePath:filePath password:phrase];
//}
return document;
}
这是我快速而又脏的方法来重新加载文档。这个解决方案的警告是,pdf阅读器不会跟踪你在我的应用程序中不重要的pdf页面中的位置。
答案 2 :(得分:1)
我遇到了同样的问题并找到了以下解决方案:
// Path to first PDF file
NSString *filePath =
[[NSBundle mainBundle] pathForResource:@"someBookeName" ofType:@"pdf"];
只需更改上面显示的文件路径即可。如您所见,现在您不需要NSArray * PDF
。