IOS UICollectionView 在使用两个 Collection View 时抛出断言
<p><p>我在一个 UIViewController 中有两个 UICollectionView。我用标签号分隔它们,以便我可以同时使用数据源和委托(delegate)方法。但是,当我运行代码时,它会因异常而崩溃:</p>
<p><code>由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“UICollectionView 接收到具有不存在索引路径的单元格的布局属性:<NSIndexPath:0xc000000000200016> {length = 2, path = 0 - 1 }'</code>.</p>
<p>我在论坛中查找了这个,大多数人说你需要使 UIControllerView 无效然后重新加载,但在我的情况下这不起作用。 </p>
<p>有人知道如何解决这个问题吗?</p>
<p>这是我的代码:</p>
<pre><code>-(void)viewDidLoad {
self.socialMediaGrayIcons = [ initWithObjects:,
,
,
,
, nil];
// setup collection view
self.avatarCollectionView.tag = 200;
self.socialMediaCollectionView.tag = 201;
UINib *cellNib = ;
;
;
// setup collection view layout
UICollectionViewFlowLayout *flowLayout = [ init];
;
;
;
;
;
;
;
;
}
....
#pragma mark UICollectionView DataSource and Delegate mathods
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
if (collectionView.tag == 200)
{
return self.children.count;
} else if (collectionView.tag == 201){
return self.socialMediaGrayIcons.count;
}
return 1;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell;
if (collectionView.tag == 200)
{
static NSString *cellIdentifier = @"cvCell";
cell = ;
Child *currentChild = ;
UIImage *curImage = ;
UIImageView *thumbView = (UIImageView *);
if (curImage != nil)
{
;
}
} else if (collectionView.tag == 201){
static NSString *cellIdentifier = @"smCell";
cell = ;
UIImage *curImage = (UIImage*) ;
UIImageView *thumbView = (UIImageView *);
if (curImage != nil)
{
;
}
}
return cell;
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>采纳@Paulw 的好建议如下所示:</p>
<pre><code>@property(weak,nonatomic) IBOutlet UICollectionView *collectionViewA;
@property(weak,nonatomic) IBOutlet UICollectionView *collectionViewB;
</code></pre>
<p>您的数据源方法必须严格按照传递的 Collection View 将条件划分为两个分支,并且始终在一个中使用一个数据源数组,在另一个中使用另一个。 </p>
<p>您可以通过始终通过方便的方法获取数据源来强制执行此宗教,例如...</p>
<pre><code>- (NSArray *)datasourceForCollectionView:(UICollectionView *)collectionView {
if (collectionView == self.collectionViewA) {
return self.children;
} else { // NOTICE - no else-if, there's no other valid condition
return self.socialMediaGrayIcons;
}
}
</code></pre>
<p>在任何地方都可以使用它,例如...</p>
<pre><code>- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return .count;
}
</code></pre></p>
<p style="font-size: 20px;">关于IOS UICollectionView 在使用两个 Collection View 时抛出断言,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/43195498/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/43195498/
</a>
</p>
页:
[1]