【问题标题】:UICollectionView mysterious crashUICollectionView 神秘崩溃
【发布时间】: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)中,或者如果它进入其他崩溃堆栈,您应该向我们准确说明。这将有助于理解真正的问题
  • 但是,启用僵尸进行调试。那应该找到并修复丑鸭

标签: ios objective-c ios7 uicollectionview uicollectionviewcell


【解决方案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 中更新与它的连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多