viewWillAppear在cellForItemAtIndexPath之后调用?

时间:2014-11-12 04:49:52

标签: ios swift uicollectionview

当我快速滑动时,某个UIViewController UICollectionView的某个let option = self.options[indexPath.row]崩溃了。 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell= collectionView.dequeueReusableCellWithReuseIdentifier("optionCell", forIndexPath: indexPath) as MyCell let option = self.options[indexPath.row] return cell } 崩溃

self.options

我发现问题是self.options有时无法成功创建。我在viewWillAppear中创建了override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) self.options = ... }

viewWillAppear

有两种可能性:

  1. viewWillAppear根本没有被调用
  2. cellForItemAtIndexPath
  3. 后会调用{{1}}

    我的代码中是否遗漏了任何内容?感谢

3 个答案:

答案 0 :(得分:1)

在默认实施中,collectionView:cellForItemAtIndexPath:后会调用viewWillAppear:

但是,collectionView:cellForItemAtIndexPath:最初是通过调用[UICollectionView -layoutSubviews]触发的。您可能正在做其他事情来调用此方法,这可以解释您所看到的行为。如果需要,可以在collectionView:cellForItemAtIndexPath:中设置断点,并查看堆栈跟踪,了解它被调用的原因。

答案 1 :(得分:0)

在我看来,答案在于您的数据源的另一种方法:您必须呈现的项目数。

我猜你在该数据源方法中返回的值不是基于options数组而是硬编码。这可以解释为什么要求您为尚未设置的数据提供单元格。

答案 2 :(得分:0)

我会假设所需的一切必须在viewDidLoad之后出现。

对于您的选项数组,最安全的解决方案是一个getter,它在尚不可用时计算options数组。当然,计数应该来自options数组,而不是来自另一个数组。