UICollectionView insertSections 错误 - NSInvalidArgumentException 原因 setObjectForKey 对象不能为 nil UIColle

Posted

技术标签:

【中文标题】UICollectionView insertSections 错误 - NSInvalidArgumentException 原因 setObjectForKey 对象不能为 nil UICollectionViewItemKey【英文标题】:UICollectionView insertSections error - NSInvalidArgumentException reason setObjectForKey object cannot be nil UICollectionViewItemKey 【发布时间】:2013-11-29 17:41:49 【问题描述】:

我在使用 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];,但我想知道其他地方是否发生了一些奇怪的事情......

感谢您提供的任何帮助。

【问题讨论】:

if(insertSections != nil) [self.collectionView insertSections:insertSections]; 【参考方案1】:

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

我应该提到这只是 ios7 的问题(也不是我在切换到 iOS 7 后遇到的 Collection Views 的第一个问题)。

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

为了解决这个特殊问题,我需要添加以下内容:

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

谢谢。

【讨论】:

我想我在我的自定义UICollectionViewLayout 中发现了类似的问题。你发射了雷达吗?【参考方案2】:

这种崩溃可能是在方法中

func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView

当 kind 是 elementKindSectionFooter 时,您尝试进入 dequeueReusableSupplementaryView(ofKind: - elementKindSectionHeader 类型的视图。 检查当前种类的笔尖寄存器。 谢谢。

【讨论】:

欢迎来到 Stack Overflow Dmitry!看起来是一个很好的答案,我建议使用反引号来格式化代码以使其更具可读性。只需在代码前后输入一个 `。

以上是关于UICollectionView insertSections 错误 - NSInvalidArgumentException 原因 setObjectForKey 对象不能为 nil UIColle的主要内容,如果未能解决你的问题,请参考以下文章

-[UICollectionView _endItemAnimations] 中的 UICollectionView 断言失败

如何滚动另一个 UICollectionView 下方的 UICollectionView?

UICollectionView 单元内部已加载,但 UICollectionView 未显示

UICollectionView 断言失败 -[UICollectionView _updateWithItems:tentativelyForReordering:]

UITableviewCell 中的 UICollectionView。添加约束后,UICollectionView 不显示

将标题添加到 UICollectionView,而不是 UICollectionView 的部分