ボタンをクリックすると、ある画面から別の画面にナビゲートしています。適切にナビゲートしていますが、ナビゲートしている画面がWebサービスの応答を取得するまで画面がハングします(viewDidLoadでWebサービスを呼び出しています)これを修正する方法ありがとう
2 に答える
Web サービス呼び出しをviewWillAppear
またはviewDidAppear
に移動します。これにより、コントローラー ビューが画面に表示された後に呼び出しが開始されます。
理想的には、メイン スレッドではなく、バックグラウンドで Web サービス呼び出しを実行する必要があります。NSOperation
およびNSOperationQueue
またはグランド セントラル ディスパッチAFNetworking
を使用します。その後、通話自体を開始できます。viewDidLoad
ここにいくつかのリンクがあります。
- NSOperations と NSOperationQueues の使用方法
- AFNetworking でネットワーキングを簡単に
- iOS クイック ヒント: Web サービスとの対話- GCD の使用について
それが役立つことを願っています!
これは、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 を使用します...