Я использую следующие три метода делегата, чтобы вытащить изображения из S3. Они вызываются в представленном порядке.Методы делегатов AWS S3, прерванные на iPhone
-(void)request:(AmazonServiceRequest *)request didReceiveResponse:(NSURLResponse *)response;
-(void)request:(AmazonServiceRequest *)request didReceiveData:(NSData *)data;
-(void)request:(AmazonServiceRequest *)request didCompleteWithResponse:(AmazonServiceResponse *)response;
Я заметил, что если изображение велико, что иногда didReceieveResponse будет вызвана прежде, чем предыдущий didCompleteWithResponse закончил. Это завинчивает NSData, полученные во втором делегате.
Как исправить это? Все три вызываются в итерации for for для каждой итерации. как так:
for (NSString *name in array){
@try {
S3GetObjectRequest *gor = [[S3GetObjectRequest alloc]initWithKey:name withBucket:[Constants pictureBucket]];
[gor setDelegate:self];
[s3 getObject:gor];
}
Простите, я не совсем понимаю. Вы хотите написать каждый запрос, чтобы проверить предыдущий, прежде чем начать? Как мне это сделать? – Eric
@ Эрик предположим, что вы хотите сохранить ответ всех трех запросов (или любого другого действия, которое вы хотите с NSData), поддерживать три объекта NSData, скажем NSData * data1, data2, data3. Теперь в вашем методе делегата проверьте, является ли (request firstRequest) {[data1 appendYourData]} else if (request is secondRequest) {..... и т. Д. Точка wholde перед тем, как сделать что-то с ответом NSData, к какому запросу принадлежит – aqs
Я предполагаю, что мой вопрос должен ли я сделать это? Почему каждый делегат не может быть связан с одним экземпляром этого объекта данных? – Eric