Hoşgeldin. Soru sormak veya cevaplamak için hemen üye ol.

Table View Search Bar Detay ekranı doğru veri problemi

0 oy
46 kez görüntülendi
27, Mayıs, 2017 ios development kategorisinde csayin tarafından soruldu

merhabalar herkse,
öncelikle bu saçma başlıktan ötürü kusura bakmayın ne yazacağımı bulamadım.
uygulamayı kısaca özetlersem json ile gelen veri bir table view'da yazdırılıyor, tabloda seçilen verinin detayı yeni ekranda gösteriliyor. Ben table view'a bir seachbar ekledim gelen veri içerisinde arama yapıyor ancak arama yapıtıktan sonra detaya gidildiğinde her zaman ilk gelen verideki 1. verinin detayına gidiyor. Arama ile listelenen verinin detayına gidemiyorum

filtreleme işlemindeki verileri burada tutuyorum;

var filteredArr = String

ve gelen veride ki "name" alanınada işlem yapması için bunu kullanıyorum;

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

filteredArr = salesNameArr.filter({ (text) -> Bool in
    let txt : NSString = text as NSString
    let range = txt.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)

    return range.location != NSNotFound
})

if searchText != ""{
    shouldShowSearchResults = true
    tableView.reloadData()

}
else {

    shouldShowSearchResults = false
    tableView.reloadData()

}

}

seçilen verinin detayına ise normal de bu sekilde gidiyorum ancak minik bir if le sorunu çözebilirmiyim dedim ama açıklamalardaki problem nedeniyle uygulama çakılıyor;

 ///for showing next detailed screen with the downloaded info
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {


        let vc = self.storyboard?.instantiateViewController(withIdentifier: "SalesDetailVC") as! SalesDetailVC

        if filteredArr == nil { //Comparing non-optional value of type '[String]' to nil always returns false


            vc.salesNameStr = salesNameArr[indexPath.row]
            vc.salesIdInt = salesIdArr[indexPath.row]
            vc.salesDateStr = salesDateArr[indexPath.row]
            vc.salesProductStr = salesProductArr[indexPath.row]
            vc.salesPriceInt = salesPricericeArr[indexPath.row]

        }

        else if filteredArr != nil  { //Comparing non-optional value of type '[String]' to nil always returns false

            vc.salesNameStr = filteredArr[indexPath.row]
            vc.salesIdInt = salesIdArr[indexPath.row]
            vc.salesDateStr = salesDateArr[indexPath.row]
            vc.salesProductStr = salesProductArr[indexPath.row]
            vc.salesPriceInt = salesPricericeArr[indexPath.row]


        }

        self.navigationController?.pushViewController(vc, animated: true)

    }

Sorunun çözümü hakkında bilgisi olan arkadaşlar yardımcı olursa sevinirim.

Herkese iyi çalışmalar.

1 cevap

0 oy
27, Mayıs, 2017 yasin tarafından cevaplandı
6, Haziran, 2017 csayin tarafından seçilmiş
 
En İyi Cevap

e gayet normal böyle bir problemin olşuması.
çünkü detay sayfasının içeriğini "indexPath.row" ile o an tableView'de listelenen satırların index numarasına göre alıyorsun.
Yani arama yaptıktan sonra filtrelenerek gösterilen yeni satırlardan birini seçtiğinde, filitrelenmiş satırın index numarasını alıyor ve detay verisine ulaşmaya çalışıyorsun.
sence de bu mantıksız değil mi? :)
seçilen satırın içeriğinin, array içerisinde kaçıncı index'e tekabül ettiğini bulmalısın.

1, Haziran, 2017 csayin tarafından yorumlandı

Öncelike teşekkür ederim cevabınız için, index numarası ile ilgili sorundan önce araştırma yaptım ancak sonuca varamadım if yapısıda sonuç vermedi maalesef konunun search bar ile bağdaşık herhangi bir cevap bulamadım araştırmalarımda da.

1, Haziran, 2017 yasin tarafından yorumlandı

tableView ile searchBar'ın nasıl doğru bir şekilde kullanılacağına dair bir örnek hazırladım.
içerisinde de gerekli açıklamaları yaptım.
aşağıdaki link üzerinden indirip inceleyebilirsin.
https://drive.google.com/open?id=0B_33To7xgYO7cHZNbEk4R1lfVTQ

6, Haziran, 2017 csayin tarafından yorumlandı

Hocam teşekkür ederim verdiğiniz örnek için ayrıca kusura bakmayın bu kadar geç döndüğüm için sahadaki işler nedeniyle proje biraz aksadı. Ellerinize sağlık.

...