1

ボタンをクリックすると、ある画面から別の画面にナビゲートしています。適切にナビゲートしていますが、ナビゲートしている画面がWebサービスの応答を取得するまで画面がハングします(viewDidLoadでWebサービスを呼び出しています)これを修正する方法ありがとう

4

2 に答える 2

1

Web サービス呼び出しをviewWillAppearまたはviewDidAppearに移動します。これにより、コントローラー ビューが画面に表示された後に呼び出しが開始されます。

理想的には、メイン スレッドではなく、バックグラウンドで Web サービス呼び出しを実行する必要があります。NSOperationおよびNSOperationQueueまたはグランド セントラル ディスパッチAFNetworkingを使用します。その後、通話自体を開始できます。viewDidLoad

ここにいくつかのリンクがあります。

  1. NSOperations と NSOperationQueues の使用方法
  2. AFNetworking でネットワーキングを簡単に
  3. iOS クイック ヒント: Web サービスとの対話- GCD の使用について

それが役立つことを願っています!

于 2013-09-12T07:01:41.880 に答える
0

これは、Web サービスに大量のデータが含まれているために発生するため、これを試す必要があります。

[NSURLConnection sendAsynchronousRequest:queue:completionHandler: を使用して画像をロードし、NSCache を使用して同じ画像を何度もダウンロードしないようにします。

多くの開発者が示唆しているように、SDWebimage を使用すると、画像ファイルをダウンロードするための上記の戦略が含まれます。コードの作成者によると、必要な数の画像を読み込むことができ、同じ URL が何度もダウンロードされることはありません。

[NSURLConnection sendAsynchronousRequest:queue:completionHandler:

NSURL *url = [NSURL URLWithString:@"your_URL"];
NSURLRequest *myUrlRequest = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest: myUrlRequest queue: queue completionHandler: ^ (NSURLResponse *response, NSData *data, NSError *error)
{

    if ([data length] > 0 && error == nil)
        //doSomething With The data

    else if (error != nil && error.code == ERROR_CODE_TIMEOUT)
        //time out error

    else if (error != nil)
        //download error
}];

次に、NSCache を使用します...

于 2013-09-12T07:01:19.613 に答える