我想使用AmazonS3Client putObject。奇怪的是,它似乎只能在iOS主线程上运行我的putObject代码时才起作用。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]
在我的代码(这是关闭主线程) ,整个视频上传方法运行(我有一些NSLogs来证明这一点),但我从来没有得到任何状态回调,没有任何异常抛出,并且该对象永远不会放入S3的桶中。
当我调用主线程上传功能,像这样:
dispatch_async(dispatch_get_main_queue(), ^(void) {
[self uploadVideoToS3];
});
我得到进步回调,一切正常,并且对象成功投放S3桶。
有谁知道putObject是否只适用于iOS主线程?如果是这样,那将是不幸的,因为它通常是UI线程。
感谢, 凯文
附:我试着调用非主线程上的函数调用,其结果相同。
你用什么代码尝试将它分派给另一个线程? – Pochi
'dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^ {[self uploadVideoToS3]});' – kevlar
在AWS网站上发现了一篇有趣的文章。使用dispatch_async可能是问题。不确定,但在这里你去 - >尽量避免在主线程上使用dispatch_sync .http://mobile.awsblog.com/post/Tx1ZZHQHSD0O3SF/Using-the-AWS-SDK-for-iOS-Asynchronously- Part-IV-Grand-Central-Dispatch-GCD-Best –