AmazonS3Client putObject работает только в основном потоке iOS?

Я пытаюсь использовать AmazonS3Client для размещения объекта. Странно то, что это работает только тогда, когда я запускаю свой код putObject в основном потоке iOS.

Код примерно такой:

-(void)uploadVideoToS3
{
    S3PutObjectRequest * videoPOR = [[S3PutObjectRequest alloc] initWithKey:video.onlineVideoID inBucket:video.onlineVideoBucketName];
    videoPOR.contentType = @"video/quicktime";
    videoPOR.data        = [NSData dataWithContentsOfURL:video.convertedVideoLocalURL];
    videoPOR.delegate    = self;

    // Put the thumbnail and video into the specified s3 
    AmazonS3Client * s3 = [AmazonClientManager s3];

    [s3 putObject:videoPOR];
    [videoPOR  release];
}

Ведро существует, у меня есть права и т. д. Если я просто позвоню

[self uploadVideoToS3]

в моем коде (, который находится вне основного потока ), выполняется весь метод загрузки видео (У меня есть несколько NSLog, чтобы доказать это ), но я никогда не получаю никаких обратных вызовов статуса, никаких исключений не выдается, и объект никогда не помещается в свою корзину на S3.

Когда я вызываю функцию загрузки в основном потоке, вот так:

dispatch_async(dispatch_get_main_queue(), ^(void) {
                    [self uploadVideoToS3];
                });

Я получаю обратные вызовы прогресса, все работает, и объект успешно помещается в корзину S3.

Кто-нибудь знает, работает ли putObject только в основном потоке iOS? Если это так, это было бы прискорбно, поскольку обычно это поток пользовательского интерфейса.

Спасибо, Кевин

P.S. Я попытался отправить вызов функции в основной поток, отличный от -, с тем же неудачным результатом.

6
задан kevlar 4 June 2012 в 00:57
поделиться