Olá, Meu código está rodando no compilador, mas quando rodo a simulação no iPhone e tento digitar no campo de busca estou recebendo o seguinte erro:
Thread 1: signal SIGABRT
2019-09-19 11:17:58.704722-0300 Sneaker Stash[23829:6914741] * Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Sneaker_Stash.Sneaker 0x600002129b80> valueForUndefinedKey:]: this class is not key value coding-compliant for the key titulo.' * First throw call stack:
Já verifiquei linha a linha, mas pela minha falta de experiência com código, alguma coisa pode estar passando batido. Já tentei substituir a palavra "titulo" (na linha let filtroListaSneakersPacks = NSPredicate(format: "titulo contains %@", searchText) a que o erro se refere, mas nada adiantou. Meu código do ViewController está escrito da seguinte forma:
import UIKit
class SneakersPackViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout, UISearchBarDelegate {
@IBOutlet weak var colecaoSneakersPacks: UICollectionView!
@IBOutlet weak var pesquisarSneakersPacks: UISearchBar!
@IBOutlet weak var labelContadorPacks: UILabel!
let listaComTodosSneakers: Array<Sneaker> = sneakerDAO().retornaTodosOsSneakers()
var listaSneakers: Array<Sneaker> = []
override func viewDidLoad() {
super.viewDidLoad()
listaSneakers = listaComTodosSneakers
colecaoSneakersPacks.dataSource = self
colecaoSneakersPacks.delegate = self
pesquisarSneakersPacks.delegate = self
self.labelContadorPacks.text = self.atualizaContadorLabel()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return self.listaSneakers.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let celulaPack = collectionView.dequeueReusableCell(withReuseIdentifier: "celulaPack", for: indexPath)
as! SneakersPacksCollectionViewCell
let sneakerAtual = listaSneakers[indexPath.item]
celulaPack.labelTitulo.text = sneakerAtual.titulo
celulaPack.labelQuantidadeItens.text = "\(sneakerAtual.quantidadeDeDias) dias"
celulaPack.labelPreco.text = "R$ \(sneakerAtual.preco)"
celulaPack.imagemMarca.image = UIImage(named: sneakerAtual.caminhoDaImagem)
celulaPack.layer.borderWidth = 0.5
celulaPack.layer.borderColor = UIColor(red: 80.0/255.0, green: 95.0/255.0, blue: 79.0/255.0, alpha: 1).cgColor
celulaPack.layer.cornerRadius = 5
return celulaPack
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let larguraCelula = collectionView.bounds.width/2
return CGSize(width: larguraCelula-10, height: 170)
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
listaSneakers = listaComTodosSneakers
if searchText != "" {
let filtroListaSneakersPacks = NSPredicate(format: "titulo contains %@", searchText)
let listaFiltrada:Array<Sneaker> = (listaSneakers as NSArray).filtered(using:filtroListaSneakersPacks) as! Array
listaSneakers = listaFiltrada
}
self.labelContadorPacks.text = self.atualizaContadorLabel()
colecaoSneakersPacks.reloadData()
}
func atualizaContadorLabel() -> String {
return listaSneakers.count == 1 ? "1 pacote encontrado" : "\(listaSneakers.count) pacotes encontrados"
}
}
Também já tentei implementar uma outra solução que vi no fórum, mas daí outros erros param tudo ainda na compilação. O que posso fazer? Obrigado pela ajuda