我应该如何预加载所有图像并使用AFNetworking缓存它们?

我需要在应用程序开始时预加载并缓存所有(近80个)图像,同时向用户显示“Please Wait”。 我做的是:

NSMutableArray *operations = [[NSMutableArray alloc] init]; for(Category *c in shop.menu.categories){ NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:c.imagePath] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30]; AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:nil cacheName:@"nscache" success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){ }]; [operations addObject:operation]; for(Item *i in c.items){ NSURLRequest *request2 = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:i.imagePath] cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30]; AFImageRequestOperation *operation2 = [AFImageRequestOperation imageRequestOperationWithRequest:request2 imageProcessingBlock:nil cacheName:@"nscache" success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){ }]; [operations addObject:operation2]; } } [[APIClient sharedClient] enqueueBatchOfHTTPRequestOperations:operations progressBlock:^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations) { float percentDone = 100 * ((float)((int)numberOfCompletedOperations) / (float)((int)totalNumberOfOperations)); //appDelegateHUD.progress = percentDone; NSLog([NSString stringWithFormat:@"%f", percentDone]); } completionBlock:^(NSArray *operations) { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; [appDelegate hideHUDWithDelay:0]; }]; 

使用此代码块,某些映像已成功缓存,但其他映像未成功缓存。 我正在使用此代码块:

  AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:imageRequest imageProcessingBlock:nil cacheName:@"nscache" success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image){ [UIView beginAnimations:@"ToggleViews" context:nil]; [UIView setAnimationDuration:1.0]; imageview.image = image; [UIView commitAnimations]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){ NSLog([error description]); } ]; [operation start]; 

图像应该直接显示,因为它们都应该在缓存中。 但他们迟到了。 我错了一些代码吗?

我想你不要等待所有图像下载

 [[APIClient sharedClient] enqueueBatchOfHTTPRequestOperations:operations progressBlock:^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations) { float percentDone = 100 * ((float)((int)numberOfCompletedOperations) / (float)((int)totalNumberOfOperations)); //appDelegateHUD.progress = percentDone; NSLog([NSString stringWithFormat:@"%f", percentDone]); } completionBlock:^(NSArray *operations) { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; [appDelegate hideHUDWithDelay:0]; // here you just hide HUD, but here you should start load images to UI }] 

;