奇怪的崩溃与通用UICollectionViewCell

时间:2015-10-29 11:04:19

标签: ios swift uikit

我遇到了一个奇怪的崩溃(请参阅此帖子的底部,了解堆栈跟踪)和一个通用的UICollectionViewCell子类。

这是我项目中集合视图单元格的根类:

import UIKit

class CollectionViewCell<T> : UICollectionViewCell {

    private var _model : T?

    var model : T? {
        get {
            return _model
        }
        set {
            _model = newValue
            self.update()
        }
    }

    class func heightForModel(model : T) -> CGFloat {
        return 0
    }

    func update() {

    }
}  

非常基本。

这是引起麻烦的子类。

class AnotherCollectionViewCell : CollectionViewCell<MyModel>

    // MARK: Update

    override func update() {

        /* Update the cell content... */

        self.contentView.setNeedsLayout() /* Crash occurs after the layout process has been triggered! */


    }

}

AnotherCollectionViewCell正在通过XIB进行实例化。

如果AnotherCollectionViewCellUICollectionViewCell的直接子类,则不会出现任何类型的崩溃!

CRASH

iOS SDK :9.1

我得到的错误是:

-[NSMutableArray addObjectsFromArray:]: array argument is not an NSArray

堆栈跟踪是:

Stack Trace

它看起来像一个错误,因为代码在模拟器上运行得很好。

知道可能导致崩溃的原因吗?

更新我

我在UIView上进行了调查以检查_accumulateViewConstraintsIntoArray

Swizzling

这是疯狂的结果,就在崩溃之前!

2015-10-29 11:23:16.660 Veni[625:990686] [-[UIView(Hack) swz_accumulateViewConstraintsIntoArray:]] TYPE: __NSArrayM
2015-10-29 11:23:16.661 Veni[625:990686] *** -[NSMutableArray addObjectsFromArray:]: array argument is not an NSArray

更新II

删除通用会使崩溃消失 - 但它不再是“Swifty”了。

class CollectionViewCell : UICollectionViewCell {

    private var _model : AnyObject?

    var model : AnyObject? {
        get {
            return _model
        }
        set {
            _model = newValue
            self.update()
        }
    }

    class func heightForModel(model : AnyObject) -> CGFloat {
        return 0
    }

    func update() {

    }
}

0 个答案:

没有答案