2014-04-17 5 views
1

Я пытаюсь прокрутить мой UICollectionView до вершины с помощью кода. Я называю этот метод:scrollToItemAtIndexPath вызывает приложение для сбоя

 [self.collectionView scrollToItemAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UICollectionViewScrollPositionTop animated:NO]; 

крушения:

** Нагрузочного приложение из-за неперехваченное исключение «NSInternalInconsistencyException», причина: «Источник данных Представления коллекции не вернулся действительная ячейкой из - collectionView: cellForItemAtIndexPath: для указательного пути {длина = 2, путь = 0 - 0} '

Не слишком уверен, как это исправить?

Спасибо!

Редактировать

Вот моя коллекция метод зрения - я загружаю три различных типа клеток, если условие:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 

{ static NSString *tableCellIdentifier = @"TableItemCell"; 
    static NSString *gridCellIdentifier = @"GridItemCell"; 
    UIActivityIndicatorView * activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 

    if (indexPath.item < [self.tradeSearchArray count]){ 

     if (self.gridLayoutActive == NO){ 

      self.switchToTableLayout = NO; 
      BBItemTableViewCell *tableItemCell = [collectionView dequeueReusableCellWithReuseIdentifier:tableCellIdentifier forIndexPath:indexPath]; 

      if ([self.tradeSearchArray count] > 0){ 

       self.toolBarButtomItem.title = [NSString stringWithFormat:@"%d Results", self.searchResult.searchResults]; 

       self.switchToTableLayout = NO; 

       tableItemCell.gridView = NO; 
       tableItemCell.backgroundColor = [UIColor whiteColor]; 
       tableItemCell.item = self.tradeSearchArray[indexPath.row]; 

      } 
      return tableItemCell; 
     }else 

     { 

      BBItemTableViewCell *gridItemCell= [collectionView dequeueReusableCellWithReuseIdentifier:gridCellIdentifier forIndexPath:indexPath]; 

      if ([self.tradeSearchArray count] > 0){ 

       self.toolBarButtomItem.title = [NSString stringWithFormat:@"%d Results", self.searchResult.searchResults]; 
       self.switchToTableLayout = YES; 

       gridItemCell.gridView = YES; 
       gridItemCell.backgroundColor = [UIColor whiteColor]; 
       gridItemCell.item = self.tradeSearchArray[indexPath.row]; 

      } 

      return gridItemCell; 
     } 
    }else 
    { 

     BBLoaderCell *loaderCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"LoaderCell" forIndexPath:indexPath]; 
     loaderCell.backgroundColor = [UIColor clearColor]; 


    if (self.maximumOffset - self.currentOffset <= 1000.0) { 
     [self loadMoreSearchResults]; 

     if (self.loadingMore){ 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       activityIndicator.hidden = NO; 
       [loaderCell.spinner startAnimating]; 
      }); 
     } 
     else{ 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       activityIndicator.hidden = YES; 
       [loaderCell.spinner stopAnimating]; 
      }); 
     } 

     return loaderCell; 
    } 
} 

    return nil; 

} 
+0

Перечитайте сообщение об ошибке и проверьте (и может быть здесь сообщение) код метода, который вызвал проблемы – Vladimir

+1

вставьте свою коллекциюView: cellForItemAtIndexPath –

+0

Обновлен вопрос с помощью метода просмотра коллекции. Спасибо, ребята – Tander

ответ

1

Проблемы заключается в том, что линия

return loaderCell; 

находится внутри заявления if

if (self.maximumOffset - self.currentOffset <= 1000.0) 

Поэтому иногда этот метод будет возвращать nil, когда его должен был вернуть loaderCell.

+0

Спасибо, что решили проблему с крахом и оригинальную проблему. Очень ценно! – Tander

+0

Означает ли это, что он никогда не должен возвращать ноль для ячейки? – Wingzero

+0

@Wingzero Да, это правильно, вы никогда не должны возвращать 'nil' из метода cellForItemAtIndexPath. – user3386109

0

Использование [NSIndexPath indexPathForItem:0 inSection:0] посмотреть, если это работает

+0

Он сделал это ...: P – Rashad

+1

indexPathForRow не является индексомPathForItem – Radu

+0

Oww .. My bad ... – Rashad

1

Просто попробуйте это для прокрутки вверху:

[self.collectionView setContentOffset:CGPointZero animated:YES]; 

Надеется, что это помогает .. :)

+0

Спасибо за подсказку. Тем не менее, все еще сбой. :(Все, что я хочу, чтобы табличное представление было наверху. – Tander

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