我得到这个错误,这个类不是密钥集合视图的密钥值编码。 ,
问题描述:
我有一个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)
}
}
答
在你的故事板(或厦门国际银行)已指定到名为collectionView
出口的连接,但在你的代码中调用它collectionView2
。
删除不良连接并重新执行它以指向当前变量名称。
+0
感谢您的帮助,我只是想知道为什么这是一个糟糕的连接? –
+0
它的工作!谢谢我现在明白我做错了什么。 –
确保所有'@ IBOutlet'正确连线到storyboard/xib。然后清除派生数据并清理项目。这应该可以解决你的问题。 – byJeevan