1

これに答える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 を返します。

  1. S3 側でデバッグを確認する方法はありますか?
  2. ファイルの取得に関して何が間違っていますか?
  3. これは、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 を返します。

4

1 に答える 1

1

私はこれを機能させました。元の質問に対する答えは、欠落しているAWSメソッドを実装することでした。2番目の質問に対する答えは、s3Objects配列の初期化を見逃していたということでした。それを行った後、それはうまくいきます。

于 2013-02-06T05:31:35.193 に答える