无法使用标识符Y将类型X的视图出列(NSInternalInconsistencyException)

时间:2017-03-08 15:20:40

标签: ios swift xcode uicollectionview

我有两个集合视图,第一个没有第二个工作正常。 但是当我添加第二个集合视图时,我收到了这个错误:

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!

}

enter image description here

enter image description here

我全班同学:

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;



    }



}

1 个答案:

答案 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
}