我遇到了一个奇怪的崩溃(请参阅此帖子的底部,了解堆栈跟踪)和一个通用的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进行实例化。
如果AnotherCollectionViewCell
是UICollectionViewCell
的直接子类,则不会出现任何类型的崩溃!
CRASH
iOS SDK :9.1
我得到的错误是:
-[NSMutableArray addObjectsFromArray:]: array argument is not an NSArray
堆栈跟踪是:
它看起来像一个错误,因为代码在模拟器上运行得很好。
知道可能导致崩溃的原因吗?
更新我
我在UIView上进行了调查以检查_accumulateViewConstraintsIntoArray
。
这是疯狂的结果,就在崩溃之前!
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() {
}
}