2013-02-20 2 views
4

У меня есть UICollectionView с заголовком размера, отличным от нуля. Кажется, всякий раз, когда insertItemsAtIndexPaths вызывается, если заголовок на экране, программа вылетает со следующим сообщением:IOS UICollectionView insertItemsAtIndexPaths сбой при заголовке на экране

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: <_UICollectionViewItemKey: 0xa38c910> Type = SV Kind = UICollectionElementKindSectionHeader IndexPath = <NSIndexPath 0xa38c7c0> 2 indexes [0, 0])' 

Когда размер заголовка равен нулю, или когда заголовок не на экране, вызывая insertItemsAtIndexPaths работает отлично. Кто-нибудь знает, как это исправить? Благодаря!

Класс является подклассом UICollectionViewController. Вот код связан с UICollectionView:

- (id)init { 
    // Collection view layout 
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init]; 
    layout.itemSize = CGSizeMake(100, 100); 
    layout.headerReferenceSize = CGSizeMake(320, 50); // Left for the switch 
    layout.minimumInteritemSpacing = 5; 
    layout.minimumLineSpacing = 5; 
    layout.scrollDirection = UICollectionViewScrollDirectionVertical; 
    layout.sectionInset = UIEdgeInsetsMake(5, 5, 5, 5); 

    if (self = [super initWithCollectionViewLayout:layout]) { 
    // Collection view setup 
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"ID"]; 
    self.collectionView.frame = CGRectMake(0, -20, 320, 480-20-44-49); 
    self.collectionView.backgroundView = nil; 
    self.collectionView.backgroundColor = [UIColor clearColor]; 
    ... 
    } 
    return self; 
} 

Затем я реализовал два метода делегата:

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    return [blogs count]; 
} 

и

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionViewArg cellForItemAtIndexPath:(NSIndexPath *)indexPath { 
    UICollectionViewCell *cell = [collectionViewArg dequeueReusableCellWithReuseIdentifier:@"ID" forIndexPath:indexPath]; 
    /* Some code to get blogView */ 
    [cell.contentView addSubview:blogView]; 
    return cell; 
} 

ответ

8

Проблема там говорится в журнале, что заголовок не может быть нулевым . Дайте там правильный ввод, и вы можете избежать аварии.

Как если секция заголовка не требует никакого ввода дать ему представление с clearclolor

Для implementhing секции заголовка необходимо реализовать следующий метод источника данных

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath; 

Happy кодирование :)

+0

Какого делегата метод я должен использовать для этого? Можете ли вы дать мне пример кода? Благодаря! – zhengwx

+0

, пожалуйста, введите код ... может быть, я могу указать, что не хватает –

+0

Я положил код в другой ответ. Благодаря! – zhengwx

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