私はAmazonS3Clientを使ってputObjectをしようとしています。奇妙なことに、iOSのメインスレッドでputObjectコードを実行した場合にのみ機能するようです。
コードは基本的に次のようになります。
-(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メインスレッドでのみ機能するかどうか誰かが知っていますか?もしそうなら、それは通常UIスレッドなので、それは残念なことです。
ありがとう、ケビン
PS同じ失敗した結果で非メインスレッドに関数呼び出しをディスパッチしようとしました。