次のコードを使用してURLをチェックするアプリケーションに取り組んでいます。
-(ボイド)あり { NSString *strImg = @"何らかの URL"; NSURL *aImgUrl = [NSURL URLWithString:strImg]; NSMutableURLRequest *imgRequest = [NSMutableURLRequest requestWithURL:strImg]; [imgRequest setHTTPMethod:@"HEAD"]; imgConnection = [NSURLConnection connectionWithRequest:imgRequest デリゲート:self]; }
これは私が応答を得たときに私がすることです。
- (void)接続:(NSURLConnection *)接続didReceiveResponse:(NSURLResponse *)応答 { if ([(NSHTTPURLResponse *)response statusCode] == 200) { // URL が存在する appDel.isExists = TRUE; 一時=偽; [自己ロードデータ]; NSLog(@"%ld",(long)[(NSHTTPURLResponse *)response statusCode]); } 他の場合 ([(NSHTTPURLResponse*) 応答 statusCode] == 404) { //URL が存在しません appDel.isExists = FALSE; 一時 = TRUE; [自己ロードデータ]; NSLog(@"%ld",(long)[(NSHTTPURLResponse *)response statusCode]); } }
これは私のロードデータコードです
-(void)loadData { 結果 = FALSE; isReqSent = FALSE; 行う { 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 キュー:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *応答、NSData *データ、NSError *connectionError) { もし(データ) { NSString *strTxt = [[NSString alloc]initWithData:データエンコーディング:NSUTF8StringEncoding]; [lblTime setText:strTxt]; [policyImgWebView loadRequest:imgRequest]; 結果 = TRUE; } }]; } もし (結果) { appDel.isExists = TRUE; } そうしないと { if(!isReqSent) { NSString *soapMessage = @"私の石鹸メッセージ"; NSString *soapAction = @"my soap url"; [objWebServiceParser xmlParsing:soapMessage :soapAction :Number]; isReqSent = TRUE; } } もし (一時) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ [self backgroundProcess]; }); } (結果 == FALSE);
これは私の背景プロセスです
-(void)backgroundProcess { NSString *strImg = @"何らかの URL"; NSURL *aImgUrl = [NSURL URLWithString:apiImage]; NSMutableURLRequest *imgRequest = [NSMutableURLRequest requestWithURL:aImgUrl]; [imgRequest setHTTPMethod:@"HEAD"]; imgConnection = [NSURLConnection connectionWithRequest:imgRequest デリゲート:self]; }
どこが間違っているのかわかりません。誰かが私を導くことができますか?
appdel.isExists を受信したデータが true になり、メイン スレッドで ui を更新するときに、データを取得するまでバックグラウンド プロセスを実行し続ける必要があります。
GCD を試しperformSelectorInTheBackground
ましたが、うまくいきませんNSThread
。エラー 35 が失敗します。
NSURLSessionDownloadTask で動作しましたが、より良いオプションを探しています。