使用UICollectionView时出现错误,如下所示:

2013-11-29 17:29:07.832 Clients[34200:70b]
*** Terminating app due to uncaught exception 'NSInvalidArgumentException',
reason: '*** setObjectForKey: object cannot be nil
(key: <_UICollectionViewItemKey: 0x8da14f0>
Type = DV ReuseID = (null) IndexPath = (null))'

代码如下所示,在这里,我基本上有两个NSMutableArrays-一个包含所有条目,另一个用于将条目缩减为一个部分-在这一点上,我将所有缺少的部分重新加入(希望感)。
[self.collectionView performBatchUpdates:^{
    NSString *selectedMarketSector = [[[[_marketSectors objectAtIndex:0] clients] objectAtIndex:0] clientMarketSector];
    NSMutableIndexSet *insertSections = [[NSMutableIndexSet alloc] init];
    for (TBMarketSector* sector in _allMarketSectors) {
        if (![[[[sector clients] objectAtIndex:0] clientMarketSector ] isEqualToString:selectedMarketSector]) {
            [insertSections addIndex:[_allMarketSectors indexOfObject:sector]];
        }
    }
    _marketSectors = [self.allMarketSectors mutableCopy];
    [self.collectionView insertSections:insertSections];
} completion:^(BOOL finished) {
    [self setLayoutStyle:TBLayoutStacks animated:YES];
}];

“看来”是导致问题的那一行是[self.collectionView insertSections:insertSections];,但我想知道其他地方是否发生了奇怪的事情……

多谢您提供的协助。

最佳答案

信不信由你,看来这个特定问题实际上与我不需要的UICollectionElementKindSectionFooter有关。

我应该提到,这只是iOS7的问题(不是切换到iOS 7后我遇到的第一个问题)。

无论如何,我的自定义UICollectionViewFlowLayout实现了- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath方法,并为所有补充视图返回了一些属性。

要解决此特定问题,我需要添加以下内容:

if ([kind isKindOfClass:[UICollectionElementKindSectionFooter class]])
    return nil;

谢谢。

07-28 09:30