我有两个集合视图,第一个没有第二个工作正常。 但是当我添加第二个集合视图时,我收到了这个错误:
2017-03-08 18:38:28.756 kashanmap[1395:16000] *** Assertion failure in -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UICollectionView.m:4971
2017-03-08 18:38:28.769 kashanmap[1395:16000] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier cellContentAJob - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
*** First throw call stack:
(
0 CoreFoundation 0x000000010a2e5d4b __exceptionPreprocess + 171
1 libobjc.A.dylib 0x000000010992621e objc_exception_throw + 48
2 CoreFoundation 0x000000010a2e9e42 +[NSException raise:format:arguments:] + 98
3 Foundation 0x00000001094bb66d -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 195
4 UIKit 0x000000010b76f44c -[UICollectionView _dequeueReusableViewOfKind:withIdentifier:forIndexPath:viewCategory:] + 2176
5 UIKit 0x000000010b76f8ea -[UICollectionView dequeueReusableCellWithReuseIdentifier:forIndexPath:] + 169
6 kashanmap 0x0000000108bc4643 _TFC9kashanmap25ContentAJobViewController14collectionViewfTCSo16UICollectionView13cellForItemAtV10Foundation9IndexPath_CSo20UICollectionViewCell + 211
7 kashanmap 0x0000000108bc54a7 _TToFC9kashanmap25ContentAJobViewController14collectionViewfTCSo16UICollectionView13cellForItemAtV10Foundation9IndexPath_CSo20UICollectionViewCell + 87
8 UIKit 0x000000010b75a75f -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + 467
9 UIKit 0x000000010b75a586 -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 35
10 UIKit 0x000000010b75fa5e -[UICollectionView _updateVisibleCellsNow:] + 4803
11 UIKit 0x000000010b765725 -[UICollectionView layoutSubviews] + 313
12 UIKit 0x000000010aee1ab8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237
13 QuartzCore 0x0000000111f76bf8 -[CALayer layoutSublayers] + 146
14 QuartzCore 0x0000000111f6a440 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
15 QuartzCore 0x0000000111f6a2be _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
16 QuartzCore 0x0000000111ef8318 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280
17 QuartzCore 0x0000000111f253ff _ZN2CA11Transaction6commitEv + 475
18 UIKit 0x000000010ae477f0 _afterCACommitHandler + 346
19 CoreFoundation 0x000000010a28a267 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
20 CoreFoundation 0x000000010a28a1d7 __CFRunLoopDoObservers + 391
21 CoreFoundation 0x000000010a26ef8e __CFRunLoopRun + 1198
22 CoreFoundation 0x000000010a26e884 CFRunLoopRunSpecific + 420
23 GraphicsServices 0x0000000111e59a6f GSEventRunModal + 161
24 UIKit 0x000000010ae1cc68 UIApplicationMain + 159
25 kashanmap 0x0000000108bd0fcf main + 111
26 libdyld.dylib 0x000000010e10f68d start + 1
27 ??? 0x0000000000000001 0x0 + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
第一个集合视图:collection_options
第二个集合视图:collection_contactus
自定义单元格类:
class CellContactUsCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var img_view_cell_contact_us: UIImageView!
@IBOutlet weak var label_view_cell_contact_us: UILabel!
}
我全班同学:
import UIKit
import ImageSlideshow
class ContentAJobViewController: UIViewController , UICollectionViewDataSource, UICollectionViewDelegate{
@IBOutlet weak var image_slider: ImageSlideshow!
var job_id = "0"
let db = DatabaseManager()
var jobs = [GlobalHelper]()
var job = GlobalHelper()
@IBOutlet weak var label_title: UILabel!
@IBOutlet weak var collection_options: UICollectionView!
@IBOutlet weak var collection_contactus: UICollectionView!
let reuseIdentifier = "cellContentAJob"
let reuseIdentifierContactUs = "cell_content_a_job_contact_us"
var item_options = [String]()
var item_contact_us = [GlobalHelper]()
override func viewDidLoad() {
super.viewDidLoad()
initialValues()
}
func initialValues()
{
db.openDatabase()
collection_options!.dataSource = self
collection_options!.delegate = self
collection_contactus!.dataSource = self
collection_contactus!.delegate = self
self.image_slider.contentScaleMode = UIViewContentMode.scaleAspectFill
jobs = db.getContentAJob(id: job_id)
job = jobs[0]
var arr_imgs = job.images.components(separatedBy: ",")
var images = [InputSource]()
for img in arr_imgs
{
let alamofireSource = AlamofireSource(urlString: img)!
images.append(alamofireSource)
}
self.image_slider.setImageInputs(images)
label_title.text = job.title
self.image_slider.bringSubview(toFront:label_title)
initialOptions()
//initialContactUs()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func initialOptions()
{
self.image_slider.bringSubview(toFront:collection_options)
if(self.job.wifi == "1")
{
self.item_options.append("wififree")
}
if(self.job.apple_health == "1")
{
self.item_options.append("sib_noghrei")
}
if(self.job.wc == "1")
{
self.item_options.append("wc")
}
if(self.job.full_time == "1")
{
self.item_options.append("fulltime")
}
if(self.job.pos == "1")
{
self.item_options.append("pos")
}
if(self.job.parking == "1")
{
self.item_options.append("parking")
}
DispatchQueue.main.async{
self.collection_options.reloadData()
}
}
func initialContactUs()
{
}
// MARK: - UICollectionViewDataSource protocol
// tell the collection view how many cells to make
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if(collectionView == collection_options)
{
return self.item_options.count
}
if(collectionView == collection_contactus)
{
return 1 //return self.item_contact_us.count
}
return 0;
}
// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
var cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! CellContentAJobCollectionViewCell
print("1")
if(collectionView == collection_options)
{
print("collection_options")
cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! CellContentAJobCollectionViewCell
let image_name = self.item_options[indexPath.row]
cell.img_view_cell_options.image = UIImage(named: image_name as! String)
return cell
}
print("2")
if(collectionView == collection_contactus)
{
print("collection_contactus")
let cell1 = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifierContactUs, for: indexPath as IndexPath) as! CellContactUsCollectionViewCell
let image_name = "tele"//self.item_contact_us[indexPath.row].images
cell1.img_view_cell_contact_us.image = UIImage(named: image_name as! String)
cell1.label_view_cell_contact_us.text = "self.item_contact_us[indexPath.row].title"
return cell1
}
print("3")
return cell;
}
}
答案 0 :(得分:0)
我将collectionView
函数内的代码更改为:
if(collectionView == collection_options)
{
var cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! CellContentAJobCollectionViewCell
cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! CellContentAJobCollectionViewCell
let image_name = self.item_options[indexPath.row]
cell.img_view_cell_options.image = UIImage(named: image_name as! String)
return cell
}
else
{
print("collection_contactus")
let cell1 = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifierContactUs, for: indexPath as IndexPath) as! CellContactUsCollectionViewCell
let image_name = "tele"//self.item_contact_us[indexPath.row].images
cell1.img_view_cell_contact_us.image = UIImage(named: image_name as! String)
cell1.label_view_cell_contact_us.text = "self.item_contact_us[indexPath.row].title"
return cell1
}