我正在开发一个应用程序,我使用以下代码检查 url。
-(无效)存在
{
NSString *strImg = @"some url";
NSURL *aImgUrl = [NSURL URLWithString:strImg];
NSMutableURLRequest *imgRequest = [NSMutableURLRequest requestWithURL:strImg];
[imgRequest setHTTPMethod:@"HEAD"];
imgConnection = [NSURLConnection connectionWithRequest:imgRequest 委托(delegate):self];
}
这就是我收到回复时所做的。
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
if ([(NSHTTPURLResponse *)response statusCode] == 200)
{
//网址存在
appDel.isExists = TRUE;
温度 = 假;
[自加载数据];
NSLog(@"%ld",(long)[(NSHTTPURLResponse *)response statusCode]);
}
否则 if([(NSHTTPURLResponse*)response statusCode] == 404)
{
//网址不存在
appDel.isExists = FALSE;
温度 = 真;
[自加载数据];
NSLog(@"%ld",(long)[(NSHTTPURLResponse *)response statusCode]);
}
}
这是我的加载数据代码
-(void)loadData
{
结果 = FALSE;
isReqSent = FALSE;
做
{
如果(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)
{
如果(数据)
{
NSString *strTxt = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
[lblTime setText:strTxt];
[policyImgWebView loadRequest:imgRequest];
结果=真;
}
}];
}
如果(结果)
{
appDel.isExists = TRUE;
}
别的
{
如果(!isReqSent)
{
NSString *soapMessage = @"我的肥皂消息";
NSString *soapAction = @"我的肥皂网址";
[objWebServiceParser xmlParsing:soapMessage :soapAction:Number];
isReqSent = TRUE;
}
}
如果(温度)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0),^{
【自身背景流程】;
});
}
} while (result == FALSE);
这是我的后台进程
-(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];
}
我不知道我哪里做错了,有人可以指导我吗?
我希望后台进程继续运行,直到它获取数据,当接收到的数据 appdel.isExists 为真并进入主线程以更新 ui 时。
我尝试了 GCD 和 performSelectorInTheBackground
,但我没有做对,并且出现 NSThread
失败错误 35。
它与 NSURLSessionDownloadTask 一起工作,但仍在寻找更好的选择。
最佳答案
要从服务器加载 UIImageView
中的图像,您可以使用以下框架。
SDWebImage
您将获得 completionBlock
、 progressBlock
以及更多可用于更新 UI 的属性。它会分块通知您,然后您可以在 UI 上更新您想要的任何内容。
样本:
如果 imageURL
有效(这是你的情况),就像这段代码一样简单,只需加载图像
UIImageView *imageView;
[imageView setImageWithURL:[NSURL URLWithString:YOUR_URL]];
它也有丰富的方法,如下所示
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 ...
}];
关于ios - 使用 do while 循环加载设置背景,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22015671/