gpt4 book ai didi

ios - AmazonS3Client putObject 仅适用于 iOS 主线程?

转载 作者:可可西里 更新时间:2023-11-01 03:44:20 26 4
gpt4 key购买 nike

我正在尝试使用 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]

在我的代码中(在主线程之外),整个视频上传方法运行(我有一些 NSLogs 来证明这一点),但我从来没有得到任何状态回调,没有抛出异常,也没有放置对象放入 S3 上的存储桶中。

当我像这样在主线程上调用上传函数时:

dispatch_async(dispatch_get_main_queue(), ^(void) {
[self uploadVideoToS3];
});

我收到进度回调,一切正常,对象已成功放入 S3 存储桶。

有谁知道 putObject 是否只能在 iOS 主线程上运行?如果是这样,那将是不幸的,因为它通常是 UI 线程。

谢谢,凯文

附言我尝试在非主线程上分派(dispatch)函数调用,但结果相同。

最佳答案

我认为您的线程在完成发送请求后终止,因此回调没有线程可去。创建线程并不自动意味着它永远存在。一旦完成任务,它就会结束并为线程池回收。要在另一个线程上执行此操作,您将必须设计一种与运行循环集成的方法。在 Threading Programming Guide 中有一节关于它在 Apple 文档中。

关于ios - AmazonS3Client putObject 仅适用于 iOS 主线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10875242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com