1

私のアプリはネットワークから大量の画像を読み込んでおり、アプリのサンドボックス環境でローカルファイルシステム(FS)に保存しています。画像をFSに保存するときはGCD、次のように使用します。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [[NSFileManager defaultManager] createFileAtPath:path contents:nil attributes:nil];
    [UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
});

そして、それはうまく機能します。ただし、FSからこのイメージを同時に取得/ロードしようとすると(別のプロセスで同じイメージが必要です)、イメージがFSに存在するかどうか、および読み取り可能かどうかを確認する際に問題が発生します。

if ([[NSFileManager defaultManager] fileExistsAtPath:path] && [[NSFileManager defaultManager] isReadableFileAtPath:path]) {
    //step 1 - image exists and I can load it from FS
    UIImage *existingImage = [UIImage imageWithData:[NSData dataWithContentsOfFile:path]];
    if (existingImage == nil) {
        NSLog(@"Loaded image is nil!");
    }
}
else {
    //step 2 - image does not exist in local FS and needs to be loaded from network
}

問題は、ステップ1に入ることがありますが(ファイルは明らかに存在し、読み取り可能です)、ロードされた「existingImage」がnilであるということです。

どうしてそれが起こったのでしょうか?イメージが書き込みプロセスの途中である可能性はありますか?画像の書き込みが100%完了し、使用できる状態になっているかどうかを確認する他の方法はありますか?

4

0 に答える 0