Reputation: 1306
I am loading some text from xml and an image, that image takes longer to load than the xml, but I want to show them at the same time.
I am loading the image using
NSData *mydata = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:imgLink]];
How can I set a callback function that lets me know that mydata
has the image, so I can add both the image and the text to the view?
Thanks
Upvotes: 3
Views: 3830
Reputation: 6120
You will have to use NSURLConnection. This is fairly straightforward, but more involved than the NSData method.
First, create an NSURLConnection:
NSMutableData *receivedData;
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:imgLink]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
receivedData=[[NSMutableData data] retain];
} else {
// inform the user that the download could not be made
}
Now, add <NSURLConnectionDelegate> to the header of your class and implement the following methods:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
- (void)connectionDidFinishLoading:(NSURLConnection *)connection;
The first one should append the data, as shown below, and the final one should create and display the image.
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
{
// append the new data to the receivedData
// receivedData is declared as a method instance elsewhere
[receivedData appendData:data];
}
See this document for more details.
Upvotes: 6