これに答えるSOに関する多くの質問を見てきましたが、ファイルがダウンロードされていないため、実装を正しく行うのに問題があります。
いくつかの背景は、s3 に 10 個のファイルのセットがあることです。S3ListObjectsResult を通じて np を確認できます。次に、その結果をフィルター処理された NSMutableArray s3Result に格納します。それはすべてうまくいっています。
後で、実際にファイルをダウンロードしたいので、これを試しました:
.h ファイル内:
@interface MainViewController : UIViewController <AmazonServiceRequestDelegate>
@property (nonatomic, strong) NSMutableArray *s3Objects;
@property (nonatomic, strong) NSMutableArray *s3Results;
.m ファイル内:
AmazonS3Client *s3 = [[AmazonS3Client alloc] initWithAccessKey:key withSecretKey:secret];
for (NSString *result in s3Results) {
S3GetObjectRequest *s3Request = [[S3GetObjectRequest alloc] initWithKey:s3Result withBucket:bucket];
s3Request.delegate = self;
S3GetObjectResponse *s3Response = [s3 getObject:s3Request];
[s3Objects addObject:[[NSData alloc] initWithData:s3Response.body]];
これは正常にコンパイルされ、正常に実行されますが、ファイルの「ダウンロード」が速すぎて実際には機能せず、実際、self.s3Objects はカウント 0 を返します。
- S3 側でデバッグを確認する方法はありますか?
- ファイルの取得に関して何が間違っていますか?
- これは、XCode シミュレーター内からこれを行っているためである可能性はありますか?
編集: わかりましたので、AWS が必要とするいくつかのメソッド、つまり didCompleteWithResponse、didReceiveData、didFailWithError、および didFailWithServiceException を追加しました。
その結果、ファイルは現在ダウンロードされていますが (response.body を出力してデータを確認できます)、s3Objects には追加されていません。
-(void)request:(AmazonServiceRequest *)request didCompleteWithResponse:(AmazonServiceResponse *)response
{
[self.s3Objects addObject:[[NSData alloc] initWithData:response.body]];
}
この後も、self.s3Objects のカウントは常に 0 を返します。