Мой вопрос, вероятно, имеет действительно очевидный ответ, который мне не хватает. У меня есть NSURLConnection, например:Вернуться к коллекцииПросмотреть функцию после подключенияDidFinishLoading
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *urlstring = [NSString stringWithFormat:@"http://127.0.0.1:8000/image/"];
NSMutableURLRequest *postRequest = [NSMutableURLRequest
requestWithURL:[NSURL URLWithString:urlstring]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:30.0];
[postRequest setHTTPMethod:@"POST"];
self.firstConnection = [[NSURLConnection alloc] initWithRequest:postRequest delegate:self];
}
-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{
if (connection == _firstConnection){
// Deal with the data
[self getImages];
[self.collectionView reloadData];
}
-(void)getImages
{
NSError *error;
NSMutableArray* images= [NSJSONSerialization JSONObjectWithData:_data options:0 error:&error];
NSUInteger arrayLength = [images count];
dressURLS = [[NSMutableArray alloc] init];
for (NSInteger i=0;i<arrayLength;i++)
{
NSString *temp = [images[i] objectForKey:@"image"];
[dressURLS addObject:temp];
}
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
static NSString *identifier = @"Cell";
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];
UIImageView *dressImageView = (UIImageView *)[cell viewWithTag:100];
NSString *clothesurl = dressURLS[i]; //i value????
NSString *url =[NSString stringWithFormat:@"http://127.0.0.1:8000/media/%@",clothesurl];
NSURL *imageURL = [NSURL URLWithString:url];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
dispatch_async(dispatch_get_main_queue(), ^{
// Update the UI
dressImageView.image = [UIImage imageWithData:imageData];
});
});
return cell;
}
Код довольно грязный, я знаю. Вот как это работает. viewDidLoad
инициализирует соединение. Он идет до connectionDidFinishLoading
, где getImages
имеет дело с данными, которые мне приходилось манипулировать и хранить в массиве. Затем я использовал метод reloadData
, чтобы перейти в коллекцию, в которой я сталкиваюсь со всеми проблемами.
Мне нужно получить доступ к элементам dressURLS[i]
, где i = 0,1,2,3. Но петля сильно осложняется тем, что a. Просмотр коллекции будет перезагружен b. Асинхронная отправка. Я не могу получить i
в петлю от 0 до 3.
Любые решения, чтобы сделать это менее сложным?
Похоже, что ваше NSURLConnection получает изображения, и что делает getImages? – rdelmar
@rdelmar NSURLConnection создает соединение, но NSJSONSerialization полученных данных происходит в getImages. – geekchic
Итак, после вызова getImages добавьте полученные изображения в любой массив, который вы используете, чтобы заполнить представление коллекции, а затем вызовите reloadData. Вы что-то пробовали? – rdelmar