我使用iOS的AWS SDK上傳和下載本地硬盤上的文件到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]
委託完美地工作。
我的問題是我做錯了在隊列中使用委託?由於代理完全有能力執行而不在隊列中,這可能與不在主線程上執行有關嗎?我真的希望能夠使用隊列來限制非併發操作的數量,但我無法弄清楚這一點。我希望有人知道這裏發生了什麼,任何示例代碼將不勝感激。謝謝! Cheers,Trond
謝謝!它完美地與你的建議。這似乎是使這項工作的訣竅是:'do {[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];} while(!_doneUploadingToS3);'我試圖運行沒有此代碼段的操作,它不工作。當我包含它時,代表無縫地工作。你能向我解釋爲什麼這段代碼如此重要以及它做了什麼?再次感謝!。歡呼聲,Trond –
此循環等待_doneUploadingToS3設置爲YES。在此之前它會循環(儘管你的CPU不會超載)。 當AWS SDK的某個完成方法被觸發時,_doneUploadingToS3被設置爲YES,並且執行主方法的其餘部分。 – romrom
非常感謝!這正是我的問題。標籤:AmazonServiceRequestDelegate無法正常工作Nsoperation nsoperationqueue – Jords