Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Código rodando no compilador, mas digitar no campo de busca gera o erro "Thread 1: signal SIGABRT"

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

1 resposta
solução!

Oi Luciano, tudo bem?

Da uma olhada nessa dúvida:

https://cursos.alura.com.br/forum/topico-erro-ao-usar-nspredicate-64550

Me parece que esse aluno teve o mesmo problema...

Caso não resolva, me avisa aqui novamente.

Abs.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software