Advertise Mobile SDKs Books Events Forum News Social Networking Support Us
Follow @iphonedevsdk on Twitter

Interface 2, Advanced iOS
Mockup & Code Gen
($9.99)

Make your own iPhone apps
and run them live!
(free)

Pic Frame Dynamo: Photo Editing
($0.99)

Abiliator
($1.99)

Want your application or service advertised on iPhone Dev SDK?

Go Back   iPhone Dev SDK Forum > iPhone SDK Development Forums > iPhone SDK Development

Reply
 
LinkBack Thread Tools Display Modes
Old 11-22-2010, 11:22 AM   #1 (permalink)
Registered Member
 
Join Date: Aug 2009
Posts: 50
JavaWizKid is on a distinguished road
Question Caching images downloaded from the web

I've been looking around the web to find some simple tutorials that explain how to download an image from the internet, cache it and then put it into a uitableview when it has finished. There are some overly complicated ones on the Apple Developer website and from them I have no idea what I'm looking for.

What I have at the moment is:
Code:
	for(int i=0;i<[ImageXX count];i++)
	{
		TFHppleElement *ImageX = [ImageXX objectAtIndex:i];
		NSString *Image = [ImageX content];
		[imageArray addObject:Image];
	}
Code:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    
    // Configure the cell...
	NSUInteger row = [indexPath row];
	cell.font=[UIFont fontWithName:@"Helvetica" size:15.0];
	cell.textLabel.text = [Array objectAtIndex:row];
	
	NSURL *url = [NSURL URLWithString:[imageArray objectAtIndex:row]];
	NSData *imageData = [NSData dataWithContentsOfURL:url];
	UIImage* imageView = [UIImage imageWithData:imageData];
	[cell setImage: imageView];
    
    return cell;
}
Of course doing it this way makes the scrolling completely laggy as the images get downloaded every time the cell with the image is visible. Using "imageNamed:" automatically caches the images except they have to be local. Can anyone point me to a nice straight forward example how to do it asynchronously or just cache the images as they download? Thanks
__________________
Discover new apps through art! Sound weird? Check it out! BigAppAd!
Follow me on Twitter!
JavaWizKid is offline   Reply With Quote
Old 11-22-2010, 11:46 AM   #2 (permalink)
Reading the Documentation
 
baja_yu's Avatar
 
Join Date: Sep 2010
Location: 45.255019,19.844908
Posts: 5,414
baja_yu has a spectacular aura about
Default

It's actually very simple

Code:
NSFileManager *fileManager = [[NSFileManager alloc] init];
[fileManager createFileAtPath:localFilePath contents:[NSData dataWithContentsOfURL:[NSURL URLWithString:remoteFilePath]] attributes:nil];
localFilePath and remoteFilePath are NSStrings with paths. Local is where you want to save it (you'd probably want to save to apps Documents director), remote is a URL.

To avoid the lag you need to download and save them with the code above, then use them in the table view with the local file.
baja_yu is offline   Reply With Quote
Old 11-22-2010, 12:11 PM   #3 (permalink)
Cocoa Junkie
 
Duncan C's Avatar
 
Join Date: Dec 2008
Location: Northern Virginia
Posts: 6,003
Duncan C has a spectacular aura about
Default

Quote:
Originally Posted by baja_yu View Post
It's actually very simple

Code:
NSFileManager *fileManager = [[NSFileManager alloc] init];
[fileManager createFileAtPath:localFilePath contents:[NSData dataWithContentsOfURL:[NSURL URLWithString:remoteFilePath]] attributes:nil];
localFilePath and remoteFilePath are NSStrings with paths. Local is where you want to save it (you'd probably want to save to apps Documents director), remote is a URL.

To avoid the lag you need to download and save them with the code above, then use them in the table view with the local file.
The code above is still doing synchronous downloads. The only way that would yield smooth downloads is if you downloaded all the images before displaying the table view.

You should implement an async download manager. There are several tutorials online on how to do this. Here's one:

UITables with Downloaded Images – Easy Asynchronous Code | markjnet
__________________
Regards,

Duncan C
WareTo

Check out our apps in the Apple App store


Check out this password generator app that shows various techniques including using a data container singleton object to share data between objects in your project.

See this tutorial on using UIView animations and layer animations:

See this thread on generating random, non-repeating text

Check out a very cool Macintosh Kaleidoscopes app called ScopeWorks that we released to the Mac App store.
Duncan C is offline   Reply With Quote
Reply

Bookmarks

Tags
downloading, uitableview

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



» Advertisements
» Online Users: 374
7 members and 367 guests
apatsufas, Kirkout, lzwasyc, MarkC, Sami Gh, SamorodovAlex, VinceYuan
Most users ever online was 1,387, 04-10-2012 at 04:21 AM.
» Stats
Members: 175,664
Threads: 94,120
Posts: 402,898
Top Poster: BrianSlick (7,990)
Welcome to our newest member, Leslie80
Powered by vBadvanced CMPS v3.1.0

All times are GMT -5. The time now is 02:45 AM.
Powered by vBulletin® Version 3.8.0
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0