i am working on an application where i check for url using following code.
-(void)exists { NSString *strImg = @"some url"; NSURL *aImgUrl = [NSURL URLWithString:strImg]; NSMutableURLRequest *imgRequest = [NSMutableURLRequest requestWithURL:strImg]; [imgRequest setHTTPMethod:@"HEAD"]; imgConnection = [NSURLConnection connectionWithRequest:imgRequest delegate:self]; }
This is what i do when i get response.
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { if ([(NSHTTPURLResponse *)response statusCode] == 200) { // url exists appDel.isExists = TRUE; temp = FALSE; [self loadData]; NSLog(@"%ld",(long)[(NSHTTPURLResponse *)response statusCode]); } else if([(NSHTTPURLResponse*)response statusCode] == 404) { //url does not exists appDel.isExists = FALSE; temp = TRUE; [self loadData]; NSLog(@"%ld",(long)[(NSHTTPURLResponse *)response statusCode]); } }
This is my load data code
-(void)loadData { result = FALSE; isReqSent = FALSE; do { if (appDel.isExists == TRUE) { NSURL *aTxtUrl = [NSURL URLWithString:apiText]; NSURL *aImgUrl = [NSURL URLWithString:apiImage]; NSURLRequest *imgRequest = [NSURLRequest requestWithURL:aImgUrl]; NSURLRequest *txtRequest = [NSURLRequest requestWithURL:aTxtUrl]; [NSURLConnection sendAsynchronousRequest:txtRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { if (data) { NSString *strTxt = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]; [lblTime setText:strTxt]; [policyImgWebView loadRequest:imgRequest]; result = TRUE; } }]; } if (result) { appDel.isExists = TRUE; } else { if(!isReqSent) { NSString *soapMessage = @"my soap message"; NSString *soapAction = @"my soap url"; [objWebServiceParser xmlParsing:soapMessage :soapAction :Number]; isReqSent = TRUE; } } if (temp) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ [self backgroundProcess]; }); } } while (result == FALSE);
This is my background Process
-(void)backgroundProcess { NSString *strImg = @"some url"; NSURL *aImgUrl = [NSURL URLWithString:apiImage]; NSMutableURLRequest *imgRequest = [NSMutableURLRequest requestWithURL:aImgUrl]; [imgRequest setHTTPMethod:@"HEAD"]; imgConnection = [NSURLConnection connectionWithRequest:imgRequest delegate:self]; }
i do not know where i am doing wrong, can any one guide me?
i want background process to keep running until it gets data, when data received appdel.isExists gets true & gets on main thread to update ui.
I tried GCD & performSelectorInTheBackground
but i am not getting it right & i get NSThread
fail error 35.
It worked with NSURLSessionDownloadTask but still looking for better option.
To load the image in your UIImageView
from server, you can use below frameworks.
You get completionBlock
, progressBlock
& many more properties that you can use to update your UI. It will notify you in blocks, then you can update whatever you want on UI.
Sample:
It's as simple as this code to just load image if the imageURL
is valid (It's your case)
UIImageView *imageView;
[imageView setImageWithURL:[NSURL URLWithString:YOUR_URL]];
And it's also have rich methods like below
UIImageView *imageView;
[imageView setImageWithURL:[NSURL URLWithString:YOUR_URL]
placeholderImage:[UIImage imageNamed:@"placeholder.png"]
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType)
{
// in "image" you'll get the downloaded image from the URL
... completion code here ...
}];