1

非同期の http GET リクエストを送信していますが、completedHandler が正しく呼び出されています。ログに出力が表示されるので、NSLog のようなコールバックのコードが実行されます。ただし、行: self.imageView.image = nil; NSLogステートメントが「ここに来ました」の数秒後まで有効にならないようです。何が起こっているか知っている人はいますか?サンプルコードは次のとおりです。

ViewController.m で:

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@end

@implementation ViewController
@synthesize imageView = _imageView;

-void viewDidLoad {
    // ImageView
    UIImage *image = [UIImage imageNamed:@"test.jpg"];
    self.imageView.backgroundColor = [UIColor blackColor];
    self.imageView.clipsToBounds = YES;
    self.imageView.image = image;
}

-void test {

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://someurl"] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:10];
    [request setHTTPMethod:@"GET"];
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [NSURLConnection sendAsynchronousRequest:request queue:queue
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
        self.imageView.image = nil;
        NSLog(@"got here");
    }];
}

@終わり

4

2 に答える 2

3

ああ、キューパラメータを[NSOperationQueuemainQueue]に設定しているように見えます。

NSURLConnection sendAsynchronousRequest:queue:completionHandler:連続して複数のリクエストを作成しますか?

于 2013-02-27T08:40:59.303 に答える
3

Undeptが提案したように、メインスレッドでそれらの行を呼び出します。そのようです:

dispatch_async (dispatch_get_main_queue (),  ^{
self.imageView2.image = nil;
self.imageView.image = nil;
}); 
于 2013-02-27T08:41:58.837 に答える