0

NSThread と dispatch_queue 内で NSURLConnection を使用してみました。実装された NSURLConnectionDelegate メソッドは呼び出されません。しかし、NSThread と NSOperationQueue 内で NSOperation を使用すると、メソッドが呼び出されます。

4

2 に答える 2

3

NSURLConnectionDelegateデリゲート メソッドが呼び出される前にスレッドまたはディスパッチ ブロックの実行が完了するため、メソッドが呼び出されていません。NSURLConnectionこのように独自のスレッドで 使用したい場合は、他の人が示唆しているように、実行ループを継続する必要があります。

ここに例があります。基本的

while(!finished) {
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}

- (void) connectionDidFinishLoading:(NSURLConnection *)connection
{
    finished = TRUE;
}

上記のすべてのことからNSURLConnection、非同期ブロック内で同期 API を使用する方がよいのではないでしょうか? たとえば、同期リクエストをNSOperation

于 2012-08-28T11:25:56.877 に答える
0

ブロックベースのアプローチを使用できます。

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    [NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
    {
        if ([data length] > 0 && error == nil){
            // we should check that data is OK
            NSLog(@"Data received");
        }
    }
于 2012-08-28T12:24:52.293 に答える