Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8674447
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 12, 20262026-06-12T19:42:44+00:00 2026-06-12T19:42:44+00:00

I am lazy loading flag images onto a tableview with 16 countries. Here is

  • 0

I am lazy loading flag images onto a tableview with 16 countries. Here is my code to do this:

#import "ViewController.h"

@implementation ViewController
@synthesize tableView;
@synthesize countryNamesArray;
@synthesize receivedData; 
@synthesize flagImage;
@synthesize flagImagesArray;
@synthesize requestsAlreadyMade;

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle
-(void)issueRequest:(NSString *)fullCountryImageURL{

    NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:fullCountryImageURL]
                                              cachePolicy:NSURLRequestUseProtocolCachePolicy
                                          timeoutInterval:60.0];
    // create the connection with the request
    // and start loading the data
    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    if (theConnection) {
        // Create the NSMutableData to hold the received data.
        // receivedData is an instance variable declared elsewhere.
        receivedData = [NSMutableData data];                                    
    } 
    else {
        // Inform the user that the connection failed.
    }
}

- (void)viewDidLoad
{   
    requestsAlreadyMade = [[NSMutableArray alloc]init];
    flagImagesArray = [[NSMutableArray alloc]init];
    for(int x=0; x<16; x++){
        [flagImagesArray insertObject:[UIImage imageNamed: @"jollyroger_poisonflag.jpg"] atIndex:x];

    }
    countryNamesArray=[[NSArray alloc] initWithObjects:@"India",@"USA",@"Antarctica",@"Brazil",@"Canada",@"China",@"France",@"Germany",@"Italy",@"Japan",@"Kenya",@"Malaysia",@"Mexico",@"South Africa",@"United Kingdom",@"Vietnam",nil];


    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
}

-(NSInteger)tableView:(UITableView *)tableview numberOfRowsInSection:(NSInteger)section{
    return 16;
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    // This method is called when the server has determined that it
    // has enough information to create the NSURLResponse.

    // It can be called multiple times, for example in the case of a
    // redirect, so each time we reset the data.

    // receivedData is an instance variable declared elsewhere.
    [receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Append the new data to receivedData.
    // receivedData is an instance variable declared elsewhere.
    [receivedData appendData:data];
}
- (void)connection:(NSURLConnection *)connectiondidFailWithError:(NSError *)error
{
    // release the connection, and the data object
    // receivedData is declared as a method instance elsewhere


    // inform the user
    NSLog(@"Connection failed! Error - %@ %@",
          [error localizedDescription],
          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // do something with the data
    // receivedData is declared as a method instance elsewhere
    NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);
    flagImage = [UIImage imageWithData: receivedData];
    if([receivedData length]==19935){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==0)
                [flagImagesArray replaceObjectAtIndex:0 withObject:flagImage];
        }
    }
    else if([receivedData length]==9280){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==1)
                [flagImagesArray replaceObjectAtIndex:1 withObject:flagImage];
        }
    }
    else if([receivedData length]==9567){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==2)
                [flagImagesArray replaceObjectAtIndex:2 withObject:flagImage];
        }
    }
    else if([receivedData length]==12152){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==3)
                [flagImagesArray replaceObjectAtIndex:3 withObject:flagImage];
        }
    }
    else if([receivedData length]==10903){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==4)
                [flagImagesArray replaceObjectAtIndex:4 withObject:flagImage];
        }
    }
    else if([receivedData length]==11298){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==5)
                [flagImagesArray replaceObjectAtIndex:5 withObject:flagImage];
        }
    }
    else if([receivedData length]==8682){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==6)
                [flagImagesArray replaceObjectAtIndex:6 withObject:flagImage];
        }
    }
    else if([receivedData length]==6865){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==7)
                [flagImagesArray replaceObjectAtIndex:7 withObject:flagImage];
        }
    }
    else if([receivedData length]==10567){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==8)
                [flagImagesArray replaceObjectAtIndex:8 withObject:flagImage];
        }
    }
    else if([receivedData length]==9423){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==9)
                [flagImagesArray replaceObjectAtIndex:9 withObject:flagImage];
        }
    }
    else if([receivedData length]==8962){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==10)
                [flagImagesArray replaceObjectAtIndex:10 withObject:flagImage];
        }
    }
    else if([receivedData length]==12238){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==11)
                [flagImagesArray replaceObjectAtIndex:11 withObject:flagImage];
        }
    }
    else if([receivedData length]==5980){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==12)
                [flagImagesArray replaceObjectAtIndex:12 withObject:flagImage];
        }
    }
    else if([receivedData length]==10562){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==13)
                [flagImagesArray replaceObjectAtIndex:13 withObject:flagImage];
        }
    }
    else if([receivedData length]==9690){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==14)
                [flagImagesArray replaceObjectAtIndex:14 withObject:flagImage];
        }
    }
    else if([receivedData length]==11590){
        for (NSIndexPath *indexPath in [tableView indexPathsForVisibleRows]){
            if(indexPath.row==15)
                [flagImagesArray replaceObjectAtIndex:15 withObject:flagImage];
        }
    }


    [tableView reloadData];
}



-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *cellIdentifier = @"countryCell";
    static int numberOfRequests=0;
    UITableViewCell *cell=(UITableViewCell *) [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell==nil){
        cell=[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
    }

    // Create the request.

    NSString *flagImageURLPartOne = @"http://www.imageslink/";
    NSString *countryNumber = [NSString stringWithFormat:@"%i", indexPath.row+1];
    NSString *flagImageURLPartTwo = @".png";
    NSString *fullCountryImageURL = [NSString stringWithFormat:@"%@%@%@", flagImageURLPartOne, countryNumber, flagImageURLPartTwo];
    if(!([requestsAlreadyMade containsObject:fullCountryImageURL])){
         [self issueRequest:fullCountryImageURL];
         [requestsAlreadyMade addObject:fullCountryImageURL];
    }



    cell.imageView.image=[flagImagesArray objectAtIndex:indexPath.row];
    cell.textLabel.text= [countryNamesArray objectAtIndex:indexPath.row];

    return cell;
}

-(void) tableView:(UITableView *) tableview didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
}


@end

So the issue I’m having is kind of a strange one. When the tableview first loads, the initial visible rows load up just fine. If I scroll down to the second half of the list quickly, all the other images lazy load up just fine as well. However, if I scroll down very slowly, one of my country’s image never loads up, even after I stop scrolling. Does anyone have any ideas what could be causing this?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-12T19:42:45+00:00Added an answer on June 12, 2026 at 7:42 pm

    I was able to resolve this issue by changing the code in my “(void)connectionDidFinishLoading:(NSURLConnection *)connection” method to check which image was downloaded based on the method [NSURLConnection currentRequest], rather than by size. This simplified the code to just one if statement and loop, which I think gave the performance boost I needed to prevent the instability.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am attempting to lazy load images onto my tableview, but I am getting
I follow this tutorial http://wptrafficanalyzer.in/blog/android-lazy-loading-images-and-text-in-listview-from-http-json-data/ . and I wonder, how can i click the
I'm using lazy loading images based on this question . I'm implementing a search
Apple just released some sample code on lazy loading images in a UITableView a
I have a situation where I'm lazy loading images from the www. It's a
Ive been using various lazy loading techniques for images and other things. It works
I use lazy loading in my application. When I work on my source code
I'm using the following code http://friendlybit.com/js/lazy-loading-asyncronous-javascript/ to make async calls but now I want
I have a lazy-loading ListView populated with images gotten over the network. The list
What's the following NHibernate lazy loading equivalent to Entity Framework? product.Categories.Add(s.Load<Category>(cat)); I tried this,

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.