4

QLPreviewControllerは、ローカルファイルのURLに基​​づいてファイルの内容をキャッシュしているようです。私のアプリケーションでは、ファイルの内容をリモートで更新でき、新しい内容がダウンロードされます。

QLPreviewControllerでファイルを表示し、リモートで更新してから再プレビューすると、ファイルが更新済みとして表示されません。

ファイルはディスク上で確実に更新され、他のコントロールは正しい更新されたファイルを表示します。

私が現在使用している回避策は、基本的に、ファイルがプレビューされたときに(タイムスタンプを使用して)一意のファイル名にファイルを移動することです。これはもちろんQLPreviewControllerのキャッシュにはありません。ただし、これには他の影響もあります。たとえば、アプリが強制終了されたり、クラッシュしたりした場合(神は禁じられています)、ダウンロードしたファイルを見つける「場所」がわかりません。

侵襲性の低いハック、またはQLPreviewControllerにキャッシュを更新させるためのソリューションを探しています。APIは何も公開していないようです。したがって、上記で示したものよりもグロスが小さい場合は、ハックを送信することを恐れないでください(ファイルを保証された一意のURLにコピー/移動することは含まれていません。利用)。

4

5 に答える 5

1

自分でこの問題に遭遇しただけです。現在表示されているアイテムと同じ名前のアイテムをリロードするたびに、QLPreviewControllerを再作成することで解決しました。新しいQLPreviewControllerを作成すると、キャッシュがクリアされます。

これは古い質問ですが、誰かが同じ問題を抱えている可能性があり、この回答が役立つと思います。

于 2013-03-15T15:02:01.437 に答える
1

ダウンロードが完了したら、refreshCurrentPreviewItem を使用する必要があります。

于 2013-06-28T06:32:00.213 に答える
0

私も同じ問題を抱えていました。ローカルで生成された CSV ファイルを開く。

コントローラーの @property として _previewController* をセットアップしました。それから私がしたこと:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.previewController = [[QLPreviewController alloc] init];
    _previewController.delegate=self;
    _previewController.dataSource=self;
}

- (void)previewCSV
{
    [_previewController reloadData]; // this triggers a reload
    [self presentModalViewController:_previewController animated:YES];
}

頭に浮かぶ他のソリューションで(テストされていません)。

URL によっては、 http://url?time=123456のようなものを URL に追加できます。このように URL を変更しますが、副作用はありません。各リクエストで変更できる時間 (またはその他のパラメーター)。

于 2013-01-08T22:14:40.150 に答える
0

これは iOS で最も醜いバグです。iOS 5 以降のキャッシュ管理。iCloud のバグや Share-at-Home のクラッシュなどと同じ理由だと思います。悪いキャッシュ管理と最悪の同期システム。

これに対する私の解決策は、ダウンロード ファイルをフォルダーに保存し、現在の日付を使用してフォルダーに名前を付けることでした。@Rogierのソリューションと同等ですが、これは常に機能します。たとえば、[[NSDate date] description] を使用してフォルダーの名前を取得します。ファイルを保存して古いファイルを置き換えるのではなく、前のファイルを削除し、前のフォルダーを削除して、新しいファイルを新しいフォルダーに保存します。それは私にとってはうまくいっています。

于 2013-04-08T08:06:56.580 に答える