1

我已经看到很多关于 SO 回答这个问题的问题,但是由于文件没有下载,我无法正确执行。

一些背景是我在 s3 中有一组 10 个文件。我可以通过 S3ListObjectsResult 看到它们。然后我将该结果存储在过滤的 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 方法。第二个问题的答案是我错过了初始化 s3Objects 数组。这样做之后,它工作得很好。

于 2013-02-06T05:31:35.193 回答