UICollectionView 神秘崩溃
Posted
技术标签:
【中文标题】UICollectionView 神秘崩溃【英文标题】:UICollectionView mysterious crash 【发布时间】:2013-12-06 14:29:49 【问题描述】:我有一个UICollectionView
,我正在用从 Internet 下载的图像填充单元格。为此,我使用SDWebImage
。我的代码如下所示:
-(UICollectionViewCell*) collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
NSString *CellIdentifier = @"Gallery_Cell";
GalleryCell *cell= (GalleryCell *)[self.flowCollection dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
if (indexPath.row < self.collectionData.count)
CellDetails *dets = [self.collectionData objectAtIndex:indexPath.row];
NSURL *mainImageURL = [NSURL URLWithString:dets.imageURL];
cell.image.contentMode = UIViewContentModeScaleAspectFill;
cell.image.clipsToBounds = YES;
[cell.image setImageWithURL:mainImageURL placeholderImage:nil];
return cell;
我相信我已正确设置。但应用程序完全随机崩溃 (EXC_BAD_ACCESS
),有时会留下此堆栈跟踪:
日志区域中没有其他消息。我尝试设置异常断点,但每次发生此崩溃时,都会显示此堆栈跟踪。有谁知道可能是什么问题?
【问题讨论】:
异常断点在这里不起作用,因为这是一个 EXC_BAD_ACCESS。意味着它可能是分段错误/分段违规。很多机会成为悬空指针 好的。那么我该如何去寻找问题的根源呢?也许是僵尸对象? 我还没有使用集合视图,但你不应该在出列后检查单元格是否为空吗?如果没有,创建单元格? 如果随机崩溃总是发生在同一个堆栈崩溃(NSIndexPath indexAtPosition)中,或者如果它进入其他崩溃堆栈,您应该向我们准确说明。这将有助于理解真正的问题 但是,启用僵尸进行调试。那应该找到并修复丑鸭 【参考方案1】:如果有人在寻找答案,我已经解决了问题并回答了与同一问题相关的另一个问题。你可以找到它here。希望对您有所帮助!
【讨论】:
【参考方案2】:您是否注册了您的 CollectionViewCells?
如果你这样做了,
dequeueReusableCellWithReuseIdentifier:forIndexPath:
如果没有可重复使用的单元格,应为您创建一个单元格。
在你的
- (void)viewDidLoad
使用 CollectionView 注册您的 Cells
UINib *galleryCellNib = [UINib nibWithNibName:@"GalleryCell" bundle:nil];
[self.collectionView registerNib:galleryCellNib forCellWithReuseIdentifier:@"Gallery_Cell"];
或
[self.collectionView registerClass:[GalleryCell class] forCellWithReuseIdentifier:@"Gallery_Cell"];
取决于你是使用 xib 还是只是一个类
【讨论】:
我的单元格是一个 xib,我已将其注册为可重复使用,标识符为“Gallery_Cell” 使用 registerNib:forCellWithReuseIdentifier: ? 是的,和你写的完全一样。 好的,然后尝试在启用僵尸的情况下进行调试 我启用了僵尸并尝试了它,它给出了相同的堆栈跟踪,但这次出现错误:“[NSIndexPath section]: message sent to deallocated instance 0x1c1f8fb0”【参考方案3】:这也可能发生在 InterfaceBuilder 中的一个连接不再有效时(自定义单元类时 - 通过从 UITableViewCell 或 UICollectionViewCell 继承)。例如:如果文件中控件的名称已更改,但未在 InterfaceBuilder 中更新与它的连接。
【讨论】:
以上是关于UICollectionView 神秘崩溃的主要内容,如果未能解决你的问题,请参考以下文章