0

我正在使用运行良好的 iOS SDK 上传到 Amazon S3,但我希望能够在加载完成时触发一个方法。

这是我的代码:

AmazonS3Client *s3 = [[[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY_ID withSecretKey:SECRET_KEY] autorelease];
// Create the picture bucket.
[s3 createBucket:[[[S3CreateBucketRequest alloc] initWithName:[Constants pictureBucket]] autorelease]];
NSString *picName = [NSString stringWithFormat:@"%@%d", PICTURE_NAME, counter];
// Upload image data.  Remember to set the content type.
S3PutObjectRequest *por = [[[S3PutObjectRequest alloc] initWithKey:picName inBucket:[Constants pictureBucket]] autorelease];
NSLog(@"------------ SUBMITTING img :%@", picName);
por.contentType = @"image/jpeg";
por.data        = imageData;
counter++;                   
// Put the image data into the specified s3 bucket and object.
[s3 putObject:por];

任何帮助都非常感谢!

4

2 回答 2

1

Amazon SDK Docs看来,您得到了一个S3PutObjectResponse

所以

S3PutObjectResponse *response  = [s3 putObject:por];
if ([response isFinishedLoading]) {
    //do something
}

或者您可能正在搜索connectionDidFinishLoading:哪个是来自 NSURLConnection 的委托方法,它们似乎相应地使用了AmazonServiceResponse 类参考

在你的 .h 文件中声明你符合 NSURLConnection 的委托协议

@interface MyClass : NSObject <NSURLConnectionDelegate>

在你的 .m 文件中实现你想要的委托方法

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
      //do your stuff here
}

并告诉 NSURLConnection 您处理 .m 文件中的委托方法

S3PutObjectRequest *por = [[[S3PutObjectRequest alloc] initWithKey:picName inBucket:[Constants pictureBucket]] autorelease];
por.urlRequest.delegate = self; // this is important !!!

一般来说,您应该习惯与代表一起工作,因为它们经常通过漏洞 iOS SDK 使用!

您可以在此处找到其他文档:代表和数据源

于 2012-06-13T10:52:19.827 回答
0

我还有一件事要添加到评论中(我知道我在这里退出了行为,但代表阻止我发表评论)。为了安全起见,我运行了这两行,因为我发现第一行并没有始终如一地保持其价值:

    por.delegate = self;
    [por setDelegate:self];

由于您是像我这样的新手,因此委托本质上是处理程序,当对象调用有时需要或不需要的强制性方法时,它看起来是这样的。如果将委托设置为self,则意味着 putObjectRequest 将在self调用它们时引用强制性方法,例如 Pfitz 回答中的方法。例如UITableView,委托方法的一个示例是(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath对象,UITableView将引用self以查找方法cellForRowAtIndexPath以填充其对象的单元队列。

于 2014-05-09T09:10:03.330 回答