我有一个具有水平流布局的集合视图。滚动大约4至5个单元格后,代码崩溃,并显示SIGABRT错误消息,我在网上找不到其他地方。
无效_removeFromEngineVarTable(NSISEngineVar)()中的声明失败,/ BuildRoot / Library / Caches / com.apple.xbs / Sources / Foundation / Foundation-1562 / Foundation / Layout.subproj / IncrementalSimplex / NSISEngine.m:1518 >
这是cellForItem的代码:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "listingCell", for: indexPath) as? ListingCollectionViewCell {
cell.listing = listings[indexPath.item]
cell.segmentedControl.removeAllSegments()
cell.listing.termContracts.forEach {
var title = ""
switch $0.availableFor {
case "Fall": title = "Fa"
case "Fall/Winter": title = "Fw"
case "Winter": title = "Wi"
case "Spring": title = "Sp"
case "Spring/Summer": title = "Ss"
case "Summer": title = "Su"
case "Year Round": title = "Year"
default: title = ""
}
cell.segmentedControl.insertSegment(withTitle: title, at: cell.segmentedControl.numberOfSegments, animated: false)
}
cell.contactLabel.text = cell.listing.contactPhone
cell.contactPersonLabel.text = cell.listing.contactPerson
cell.addressLabel.text = cell.listing.address
//Default data to first contract
if cell.listing.termContracts.isEmpty {
cell.rentLabel.text = "N/A"
cell.sharedPrivateLabel.text = ""
} else {
if let rent = cell.listing.termContracts[0].rent {
cell.rentLabel.text = rent == 0 ? "Free" : "$\(rent)/mo"
}
if let sharedPrivate = cell.listing.termContracts[0].sharedPrivate {
cell.sharedPrivateLabel.text = sharedPrivate
}
}
cell.segmentedControl.selectedSegmentIndex = 0
return cell
}
return UICollectionViewCell()
}
问题出在这一行:
if let rent = cell.listing.termContracts[0].rent {
cell.rentLabel.text = rent == 0 ? "Free" : "$\(rent)/mo"
}
当我替换为
if let rent = cell.listing.termContracts[0].rent {
cell.rentLabel.text = rent == 0 ? "Free" : "$\(cell.listing.termContracts[0].rent)"
}
效果很好。但是因为租金是可选的,所以在渲染时会出现难看的“ Optional(___)”。这是一个错误吗?我认为没有任何原因可以破坏,因为我正在安全地处理所有事情。我也不认为放租和扔进去之间没有根本的区别。
当我使集合视图滚动到特定索引时,集合视图也会崩溃,这使我认为这是可重用的问题?
编辑:IB详细信息
答案 0 :(得分:1)
您遇到自动版式问题。 NSISEngine是自动布局的“求解器”。您尚未描述界面,因此无法提供更精确的帮助,但是在自动布局约束(不平等或降低优先级?)中必须解决一些困难或耗时的事情,并且可能是{{1}上的约束}或与其关联的内容(或colorArray
的布局确定属性)。
首先简化该标签的布局,即使这提供了“错误”的界面,并查看是否可以解决问题。如果可以,请尝试以更有效的方式还原约束。
答案 1 :(得分:1)
我向uiLabel添加了固定宽度约束,并且停止崩溃。感谢@Matt the Legend,帮助我弄清楚了这一点!