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 不显示