私のiPhoneアプリでは、Webからいくつかの画像をダウンロードしています。UI スレッドをブロックするかどうかは問題ではありません。実際には、完全にダウンロードされるまで UI スレッドをブロックする必要があります。完了したら、UI を起動して表示するように通知します。
私の(簡略化された)コードは次のようになります。
for (int i=0; i<10; i++)
{
//call saveImageFromURL (params)
}
//Call to Notify UI to wake up and show the images
+(void) saveImageFromURL:(NSString *)fileURL :(NSString *)destPath :(NSString *)fileName
{
NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:fileURL]];
NSFileManager * fileManager = [NSFileManager defaultManager];
BOOL bExists, isDir;
bExists = [fileManager fileExistsAtPath:destPath isDirectory:&isDir];
if (!bExists)
{
NSError *error = nil;
[fileManager createDirectoryAtPath:destPath withIntermediateDirectories:YES attributes:nil error:&error];
if (error)
{
NSLog(@"%@",[error description]);
return;
}
}
NSString *filePath = [destPath stringByAppendingPathComponent:fileName];
[data writeToFile:filePath options:NSAtomicWrite error:nil];
}
ループが完了したらfor
、すべての画像がローカルに保存されていることを確信しています。そして、シミュレーターでは問題なく動作します。
ただし、私のデバイスではうまく機能しません。画像が保存される前に UI が起動します。そして、ほとんどすべての画像が空に見えます。
私は何を間違っていますか?