1

シンプルなUITableViewがあり、各セルには、ユーザーがiOSデバイスのカメラで撮影した可能性のあるサムネイル画像があります。

iCloudが有効になっている場合、画像はiCloudに保存されます。ただし、画像の読み込み時に何らかのキャッシュが発生するのではないかと思っていました。最初の読み込みが遅いことに気付いたため、画面にセルが表示されたときにコードを再度呼び出しても、画像は非常に速く表示されます。

これは関連するコードフラグメントです。セルを構築するためのロジックを省略しました。質問は他の側面に関するものであるため、関連性はないと思います。

- (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // logic for retrieve data and build cell

    NSURL *ubiquityUrl = [fm URLForUbiquityContainerIdentifier:nil];
    NSURL *docURL = [ubiquityUrl
                     URLByAppendingPathComponent:[NSString stringWithFormat:@"P_%@_%@.jpg",imgId,@"thumbnail"]
                     isDirectory:NO];
    // this a custom object extending UIDocument
    IP2DataDocument *dataDocument = [[IP2DataDocument alloc] initWithFileURL:docURL];

    [dataDocument openWithCompletionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"iCloud document opened");
            // logic for filling table cell picture 
        } else {                
            NSLog(@"failed opening document from iCloud");                
        }


       }];

    // returning cell
}

セルが表示されるたびに、Xcodeで「iCloudドキュメントが開かれました」と表示されます。ある種のキャッシュが発生した場合、どこでどのように指摘できますか?

4

2 に答える 2

1

iOS 向けのドキュメントベースのアプリ プログラミング ガイドには、次のように書かれています。

アプリケーションの iCloud ドキュメントについて知るためにメタデータ クエリを実行すると、クエリの結果はNSMetadataItemドキュメント ファイルのプレースホルダー アイテム (オブジェクト) になります。アイテムには、URL や変更日など、ファイルに関するメタデータが含まれています。ドキュメント ファイルが iCloud コンテナ ディレクトリにありません。

ドキュメントの実際のデータは、次のいずれかが発生するまでダウンロードされません。

  • アプリケーションは、 を呼び出すなどして、ファイルを開こうとするか、ファイルにアクセスしようとしますopenWithCompletionHandler:
  • アプリケーションはNSFileManagerメソッドstartDownloadingUbiquitousItemAtURL:error:を呼び出してデータを明示的にダウンロードします。

要約すると、ドキュメントを初めて開いたときは、iCloud からまだダウンロードされていない可能性があるため、時間がかかります。その後、明らかに読み取りが高速なファイルのローカル コピーが作成されます。

于 2012-05-20T16:03:20.577 に答える
0

それはあなたのdocURLまたは特別です

NSURL *ubiquityUrl = [fm URLForUbiquityContainerIdentifier:nil];

実際に iCloud に直接アクセスすることはありません。iCloud 対応の同等のローカル ロケーション (ubiquityUrl) にアクセスします。取得しようとしているファイルがまだローカルにダウンロードされていない場合は、アクセス時にローカルの iCloud デーモンがファイルをダウンロードします。これが発生すると、デバイスにローカルに保存されます。そのため、次に docURL を使用して再度アクセスしようとすると、これによりはるかに高速になります。また、iCloud デーモンはドキュメントのバージョンの同期も担当します。そのため、誰かが別のデバイスから同じドキュメントの新しいバージョンを更新したとしても、心配する必要はありません。

于 2012-05-20T15:55:33.733 に答える