

swift5でUICollectionViewを使用し、Cellはxlbを使用したカスタマイズドセルにするつもりです。  
このモジュールはSwiftを始めた頃に習って作ったのですが、新規のアプリを作るのでやり直してみたのですがエラーが発生してしまいました。  
昔、このようなエラーを見た記憶があり「login_cLP」というkeyが場所により違っていたためでした。そのために全て手で入れ直したのですが、やはりだめでした。

**エラーメッセージ**

[code]

    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'could not dequeue a view of kind: UICollectionElementKindCell with identifier login_cLP - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'
    terminating with uncaught exception of type NSException
    
[/code]

**ソースコード**

[code]

    import UIKit
    import StoreKit
    
    class MenuViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {
    
        @IBOutlet weak var loginIdView: UICollectionView!
        @IBOutlet weak var explanationView: UICollectionView!
        @IBOutlet weak var recordCalendarView: UICollectionView!
        @IBOutlet weak var bannerImage: UIImageView!
        
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
    
            // navigationItemにタイトル
            self.navigationItem.title = contract.office
            
            // 日付管理クラスのイニシャライズ
            cm.cdm_init()
    
            //カスタムセルをcollectionViewに登録する
            //カスタムセルを取ってくる
            let cLP = UINib(nibName: "Cell_Label_Print", bundle: nil)
            self.loginIdView.register(cLP, forCellWithReuseIdentifier: "login_cLP")
            self.explanationView.register(cLP, forCellWithReuseIdentifier: "explanation_cLP")
            self.recordCalendarView.register(cLP, forCellWithReuseIdentifier: "calendar_cLP")
            
            let cLC = UINib(nibName: "Cell_Label_Command", bundle: nil)
            self.recordCalendarView.register(cLC, forCellWithReuseIdentifier: "calendar_cLC")
            
        以下省略
        }
    
        func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    //        print("collectionView.tag",collectionView.tag,indexPath, product)
            switch collectionView.tag {
            case menuLoginTag:
                let cell = prepare_Cell_Label_Print(viewType: collectionView, indexPath: indexPath, key: "login_cLP", value: monthlyLoginLabel[indexPath.row], attribute: monthlyLoginIdAttribute[indexPath.row])
        以下省略
            case menuExplanationTag:
                let cell = prepare_Cell_Label_Print(viewType: collectionView, indexPath: indexPath, key: "explanation_cLP", value: explanationMenuLabel[indexPath.row], attribute: explanationMenuAttribute[indexPath.row])
    
        以下省略
    
            default:  // menuCalendarTag
    
        以下省略
    
            }
        }
    }
    
    import UIKit
    
    class Cell_Label_Print: UICollectionViewCell {
    
        @IBOutlet weak var BackView: UIView!
        @IBOutlet weak var ForeView: UIView!
        @IBOutlet weak var contents: UILabel!
        
        @IBOutlet weak var top: NSLayoutConstraint!
        @IBOutlet weak var trailing: NSLayoutConstraint!
        @IBOutlet weak var leading: NSLayoutConstraint!
        @IBOutlet weak var bottom: NSLayoutConstraint!
        
        override func awakeFromNib() {
            super.awakeFromNib()
            // Initialization code
        }
    
        override func prepareForReuse() {
            super.prepareForReuse()
    
            contents.attributedText = nil
        }
    }
    
[/code]


CC BY-SA 4.0
2022-02-10T06:31:39.883
86247
2022-02-10T13:20:33.170
2022-02-10T07:50:08.927
3060
47542
question
swift swift5 uicollectionview xib
Swift5でカスタマイズセルを作成していますがエラーになってしまいます。


カスタムセルを表示する`View`または`ViewController`の`awakeFromNib()`の中で、`xib(nib)`を`register`する必要があるのでは無いでしょうか?  
カスタムセルを利用する際は`awakeFromNib`辺りの中で

[code]

    guard let nib: NSNib = NSNib(nibNamed: "カスタムセルのxib名", bundle: Bundle.main) else { continue }
    let identifier: NSUserInterfaceItemIdentifier = NSUserInterfaceItemIdentifier(rawValue: "カスタムセルのIdentifier")
    self.tableViewComment.register(nib, forIdentifier: identifier)
    
[/code]

などのようにして、この`View`インスタンスはカスタムセルをこの`Identifier`で使用するので登録してね。というのを行わないといけないと思います。


CC BY-SA 4.0
2022-02-10T07:07:30.440
86250
2022-02-10T13:20:33.170
2022-02-10T13:20:33.170
14745
14745
86247
answer