我正在开发一个应用程序,我使用以下代码检查 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

您将获得 completionBlockprogressBlock 以及更多可用于更新 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/

10-12 18:57