2013-09-13 6 views
0

Мой вопрос, вероятно, имеет действительно очевидный ответ, который мне не хватает. У меня есть 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.

Любые решения, чтобы сделать это менее сложным?

+0

Похоже, что ваше NSURLConnection получает изображения, и что делает getImages? – rdelmar

+0

@rdelmar NSURLConnection создает соединение, но NSJSONSerialization полученных данных происходит в getImages. – geekchic

+0

Итак, после вызова getImages добавьте полученные изображения в любой массив, который вы используете, чтобы заполнить представление коллекции, а затем вызовите reloadData. Вы что-то пробовали? – rdelmar

ответ

1
-(void)connectionDidFinishLoading:(NSURLConnection*)connection 
{ 
if (connection == _firstConnection){ 
    // Deal with the data 
    [self getImages]; 
    [collectionView reloaddata]; // or self.collectionView (for property) 
} 

} 

«Обсуждение вызова этот метод, чтобы перезагрузить все элементы в представлении коллекции. Это приводит к тому, представление коллекции, чтобы отменить любые видимые в данный момент предметов и их повторного.» - Apple

+0

Это действительно не мой вопрос. Нечего перезагружать или перерисовывать. Также нет такой вещи, как '[collectionView reload data];' – geekchic

+0

Да, есть https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICollectionView_class/Reference/Reference.html#//apple_ref/ОКК/instm/UICollectionView/reloadData. –

+0

@ Нихита, что вы имеете в виду, нечего перезагружать или перерисовывать? Вы спрашиваете, говорит: «Я хотел бы вернуться к функции collectionView, чтобы отображать изображения в представлении коллекции из только что полученных URL». Разве это не требует перезагрузки просмотра коллекции? – rdelmar

0

Вы можете BOOL в первый раз & во второй раз проверить состояние & показать изображения, перезагрузив представление коллекции.

+0

Это полезно для вас ?? – user1673099

Смежные вопросы