0

URLから画像を取得するiPhoneアプリに取り組んでいます。'NSData dataWithContentsOfUrl]を使用していましたが、正常に機能しました。しかし、ご想像のとおり、リクエストは同期的です。

リクエストを非同期にしたい。そこで、NSURLConnectionのsendAsynchronousRequest()呼び出しを使用してみました。しかし、これはメソッド'didFailWithError'で次のエラーを返します:

エラードメイン=kCFErrorDomainCFNetworkコード=310"セキュアWebプロキシサーバー(HTTPS)との通信に問題がありました。

誰か助けてもらえますか?

これは私のNSURLConnectionコードスニペットです:

NSURL *url = [NSURL URLWithString:notePicUrl];

            NSURLRequest *urlRequest = [NSURLRequest  requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:100.0];
            //NSOperationQueue *queue = [[NSOperationQueue alloc] init];

            NSURLConnection* _connection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:NO];
            self.port = [NSPort port];                                                                                                       
            self.runLoop = [NSRunLoop currentRunLoop];                                                                                       
            [self.runLoop addPort:self.port forMode:NSDefaultRunLoopMode];
            [_connection scheduleInRunLoop:self.runLoop forMode:NSDefaultRunLoopMode];
            [_connection start];
            while (self.finished != YES ) {
                [self.runLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow: 0.1]]; 
            }
            [self.runLoop removePort:[self port] forMode:NSDefaultRunLoopMode];
            [_connection unscheduleFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

そして、NSURLConnectionDelegateメソッド(まだ実装されていません。最初に機能するかどうかをテストするだけです)...

-(void)connection:(NSURLConnection*)connection didReceiveResponse:(NSURLResponse*)response
{
    NSLog(@"didReceiveResponse");
    //_data = [[NSMutableData alloc] init]; // _data being an ivar
}
-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
    NSLog(@"didReceiveData");
    //[_data appendData:data];
}
-(void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error
{
    NSLog(@"didFailWithError %@", [error description]);
    // Handle the error properly
}
-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{
    NSLog(@"connectionDidFinishLoading");
    //[self handleDownloadedData]; // Deal with the data
}
4

1 に答える 1

0

これを修正しました; 単純なコード行を使用してみました:

[[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];

そして、Delegateメソッドでデータを処理します。以前は、別のスレッドで実行しようとしていました。これは問題なく機能し、非同期です。

于 2012-10-16T13:04:26.630 に答える