在我的应用程序中,我有一个tableView充满了来自服务器的内容。要下载这些内容,我使用NSURLConnection,并创建一个NSMutableArray(tableItems)来保存和管理我想要使用的图像的地址。正在运行for循环时退出应用程序
在connectionDidFinishLoading,填充tableItems后,有这样的循环:
for (int i = 0; i < [tableItems count]; i++) {
// HERE I CHECK IF THE IMAGE I'M LOOKING FOR IS ALREADY ON DISK
NSString *pathToCheckImage = [NSString stringWithFormat:@"%@/%@.png", pathToPreviews, [tableItems objectAtIndex:i]];
NSData *dataOfCheckImage = [NSData dataWithContentsOfFile:pathToCheckImage];
UIImage *checkImage = [UIImage imageWithData:dataOfCheckImage];
NSString *pathToImage;
UIImage *image;
if (checkImage != nil) {
// THE IMAGE IS ALREADY ON DISK SO I GET IT FROM TEMP FOLDER
image = checkImage;
} else {
// THE IMAGE IS NEW SO I HAVE TO GET THE IMAGE FROM THE SERVER
pathToImage = [NSString stringWithFormat:@"http://www.SERVER.com/SERVER_PATH/%@.png", [tableItems objectAtIndex:i]];
NSURL *url = [NSURL URLWithString:pathToImage];
NSData *data = [NSData dataWithContentsOfURL:url];
image = [UIImage imageWithData:data];
// AND SAVE IT ON DISK
NSString *path = [NSString stringWithFormat:@"%@/%@.png", pathToPreviews, [tableItems objectAtIndex:i]];
[self cacheImageOnDisk:image withPath:path];
}
if (image != nil) {
[arrayOfImages addObject:image];
}
}
此代码的工作,即使,这取决于我必须从服务器下载的图像的数量和大小,它可能需要1或2分钟才能完成任务。
问题是,如果用户退出(home按钮被按下),而这个for-loop正在运行,它会继续执行它的任务直到结束,即使它需要1分钟才能完成它。
在此期间,再次启动应用程序不可避免地会在启动时崩溃。
我试图阻止这个for-loop退出,但applicationDidEnterBackground,applicationWillResignActive和applicationWillTerminate不会被调用,直到for-loop结束它的任务。
我试着设置“应用程序不在后台运行”,但没有任何改变。
任何建议将非常感激。
你可以拦截按钮按下,在某处设置一个标志,并检查你的循环中的标志,并保释,如果它的设置? – Bill 2012-02-04 01:53:30
这就是我正在做的事情,但applicationDidEnterBackground,applicationWillResignActive和applicationWillTerminate不会被调用,直到for-loop结束它的任务,所以我不知道如何拦截按钮按下。我错过了一些基本的架构? – Beppe 2012-02-04 02:01:55