3

次のコードを使用して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 で動作しましたが、より良いオプションを探しています。

4

2 に答える 2

2

バックグラウンドで呼び出さないNSURLConnectionでください。NSURLConnection自動的に動作します。非同期リクエストを送信していないため、バックグラウンドで動作し、メイン スレッドがハングすることはありません。ロードデータでディスパッチを削除します。あなたが持っている:

if (temp)
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
            [self backgroundProcess];
        });
    }

成功する:

if (temp)
    {
        [self backgroundProcess];
    }

ディスパッチを使用する必要はありません。

于 2014-02-26T09:06:53.920 に答える
0

UIImageView送信元サーバーに画像をロードするには、以下のフレームワークを使用できます。

SDWebImage

completionBlockUI を更新するために使用できる、progressBlockおよびその他の多くのプロパティを取得します。ブロックで通知され、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 ...

           }];
于 2014-02-28T03:21:56.440 に答える