Я использую AWS SDK для iOS для загрузки и загрузки файлов с локального жесткого диска и в хранилище Amazon S3. Я способен выполнить эту работу, но не могу заставить делегата S3 правильно ответить, чтобы предупредить меня о завершении операций или об ошибке.
У меня есть массив файлов, которые я хочу загрузить. Для каждого файла я создаю NSOperation
, где подпрограмма main
состоит в основном из:
AmazonCredentials * credentials = [[AmazonCredentials alloc] initWithAccessKey:ACCESS_KEY_ID withSecretKey:SECRET_KEY];
putObjectRequest = [[S3PutObjectRequest alloc] initWithKey:pathCopy inBucket:[self bucket]];
putObjectRequest.filename = pathSource;
putObjectRequest.credentials=credentials;
[putObjectRequest setDelegate:s3Delegate];
Здесь делегат (s3Delegate
) создается как обычный AmazonServiceRequestDelegate , который должен иметь возможность инициировать ответы после завершения операции. Каждый из моих NSOperations
добавляется к моему NSOperationQueue
, который выполняет операции не одновременно. Если я использую делегата [putObjectRequest setDelegate:s3Delegate]
, операции не работают. Если я удалю использование делегата, операции будут выполнены правильно, но я не смогу получить никаких ответов на операции, поскольку у меня нет делегата.
Если я полностью откажусь от использования NSOperationQueue
и использую [putObjectRequest setDelegate:s3Delegate]
, делегат работает отлично.
У меня вопрос: что я делаю не так с использованием делегата в очереди? Так как делегат может выполнять, не находясь в очереди, это может быть связано с отсутствием в основном потоке? Я действительно хочу иметь возможность использовать очередь, чтобы ограничить количество не параллельных операций, однако я не могу понять это. Я надеюсь, что кто-то имеет представление о том, что здесь происходит, и любой пример кода будет принята с благодарностью. Спасибо!
Ура, тронд