1

vfr/readerを使用して PDF ファイルを開きます。最初の 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」を読みたいのですが、アプリはまだ最初のパス「ISSUE2_2011/Mathematics.pdf」を読み込んでいます

なぜfilePathまだ同じですか?

どうすればこの問題を解決できますか?

4

3 に答える 3

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

これらのファイルは、クラス ReaderDocument の「unarchiveFromFileName」メソッドで同じ Mathematics.plist ファイルを探しています。

NSString *archivePath = [ReaderDocument applicationSupportPath]; // Application's "~/Library/Application Support" path

NSString *archiveName = [[filename stringByDeletingPathExtension] stringByAppendingPathExtension:@"plist"];

このコード セクションを変更するか、Mathematics_ISSUE3_2011.pdf や Mathematics_ISSUE2_2011.pdf のような一意の名前をファイルに付けてみてください。

于 2013-02-18T14:15:26.323 に答える
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 ページで中断した場所を追跡しないことです。これは、私のアプリでは重要ではありませんでした。

于 2013-02-14T00:51:37.603 に答える
1

私は同じ問題に直面していて、次の解決策を見つけました:

// Path to first PDF file
NSString *filePath = 
    [[NSBundle mainBundle] pathForResource:@"someBookeName" ofType:@"pdf"];

上記のようにファイルパスを変更するだけです。ご覧のとおり、今は必要ありませんNSArray * PDF

于 2016-08-28T08:56:56.540 に答える