我得到这个错误,这个类不是密钥集合视图的密钥值编码。 ,

问题描述:

我有一个UIViewController,并嵌入我有一个UICollectionView,我也有叫ChatCell一个子类我得到这个错误,这个类不是密钥集合视图的密钥值编码。 ,

ChatCell Subclass: 
class ChatCell: UICollectionViewCell { 

    @IBOutlet weak var chatLabel: UILabel! 
    @IBOutlet weak var chatImage: UIImageView! 

} 

class ChatRoom: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UICollectionViewDataSource, UICollectionViewDelegate { 



    @IBOutlet weak var collectionView2: UICollectionView! 

//我的错误是^ I更改了名字,我没有更新的故事板出口!确保你有正确的插座,否则它们将不被xcode识别。

var secondClass : ChatCell? 

    struct Object { 
     var image: UIImage! 
     var title: String! 
    } 

    // Properties 
    var object: Object? 
    var objects: [Object] = [] 
    var picker: UIImagePickerController! 


    // Do any additional setup after loading the view, typically from a nib. 


    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     picker = UIImagePickerController() 
     picker?.allowsEditing = false 
     picker?.delegate = self 
     picker?.sourceType = .photoLibrary 
     // NavigationBar Characteristics 
    } 

    override func viewDidAppear(_ animated: Bool) { 
     self.navigationController?.isNavigationBarHidden = false 
     self.navigationController?.navigationBar.barTintColor = UIColor.black 
     self.navigationController?.navigationBar.isTranslucent = false 
     // self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Logout", style: .plain, target: self, action: #selector(handleLogout)) 
     self.navigationItem.leftBarButtonItem?.tintColor = UIColor.green 
     self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "+", style: .plain, target: self, action: #selector(didSelectCreateButton)) 
     self.navigationItem.rightBarButtonItem?.tintColor = UIColor.green 

    } 


    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as UICollectionViewCell 
     let object = objects[indexPath.row] 

     secondClass?.chatLabel.text = object.title ?? "" 
     secondClass?.chatImage.image = object.image ?? UIImage() 


     return cell 
    } 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return objects.count 

    } 

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

     switch info[UIImagePickerControllerOriginalImage] as? UIImage { 
     case let .some(image): 
      object?.image = image 
     default: 
      break 
     } 

     picker.dismiss(animated: true) { 
      self.showCellTitleAlert() 
     } 
    } 

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 

     object = nil 

     dismiss(animated: true) { 
      self.collectionView2!.reloadData() 
     } 
    } 

    // Alerts 

    func showCellTitleAlert() { 

     let alert = UIAlertController(title: "Cell Title", message: nil, preferredStyle: .alert) 

     alert.addTextField { $0.placeholder = "Title" } 
     alert.addAction(UIAlertAction(title: "Cancel", style: .cancel) { _ in 
      self.object = nil 
     }) 
     alert.addAction(UIAlertAction(title: "Save", style: .default) { _ in 
      self.object?.title = (alert.textFields?.first.flatMap { $0.text })! 
      self.object.flatMap { self.objects.append($0) } 
      self.collectionView2?.reloadData() 
     }) 

     present(alert, animated: true, completion: nil) 
    } 

    // Create new Cell 
    ////////?////////////// 
    @IBAction func didSelectCreateButton() { 

     object = Object() 

     present(picker, animated: true, completion: nil) 
    } 

} 
+0

确保所有'@ IBOutlet'正确连线到storyboard/xib。然后清除派生数据并清理项目。这应该可以解决你的问题。 – byJeevan

在你的故事板(或厦门国际银行)已指定到名为collectionView出口的连接,但在你的代码中调用它collectionView2

删除不良连接并重新执行它以指向当前变量名称。

+0

感谢您的帮助,我只是想知道为什么这是一个糟糕的连接? –

+0

它的工作!谢谢我现在明白我做错了什么。 –