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

Sql veri tabanindan sorgu ile table view'ın içeriğini doldurma?

0 oy
277 kez görüntülendi
15, Aralık, 2015 ios development kategorisinde csayin tarafından soruldu

merhabalar arkadaslar, 

uygulamada sqlite veri tabani kullaniyorum. veri tabaninda 'yerler' (yer_id, yer_adi) ve 'yerlerin_detayi' (detay_id, yer_id, detay_adi ) adinda iki tablo var. uygulamanin icine yapilari olusturarak yerler.swift ve yerDetay.swift olarak iki sinif olusturdum iclerine storyboard'da tableview ekleyip gerekli baglantilarini kurdum. 

ilk olarak yerler ekrani aciliyor burdaki yerleri tableview'da listeledim. sorun su; yerler ekraninda bir secim yaptigimda 'yer_id'=1 olan eleman secildiginde yerDetay ekranina segue baglantisiyla gidilecek ve burada 'yerlerin_detayi' tablosundaki yer_id=1 olanlar yerDetay ekranindaki table view'da listelenecek. Bunu nasil yapacagin hakkinda yardimci olabilirseniz sevinirim.

yerler.swift sinifinda asagidaki yapi ile listelemeyi yaptim. didSelectRowAtIndexPath ve prepareForSegue metotlarinida olusturmam gerektigini dusunuyorum. ancak bilgi seviyem neticesinde buraya kadar gelebildim

  1. import UIKit
  2.  
  3. class CategoryViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
  4. @IBOutlet var table:UITableView!
  5. var data = [Category]()
  6. let db = SQLiteDB.sharedInstance()
  7.  
  8. override func viewDidLoad() {
  9.         super.viewDidLoad()
  10.     }
  11.  
  12. override func viewWillAppear(animated: Bool) {
  13.         super.viewWillAppear(animated)
  14.         data = Category().allRows("name ASC")
  15.         table.reloadData()
  16.     }
  17.  
  18. override func didReceiveMemoryWarning() {
  19.         super.didReceiveMemoryWarning()
  20.     }
  21.  
  22. // UITableView Delegates
  23. func tableView(tv:UITableView, numberOfRowsInSection section:Int) -> Int {
  24.         let cnt = data.count
  25.         return cnt
  26.     }
  27.  
  28. func tableView(tv:UITableView, cellForRowAtIndexPath indexPath:NSIndexPath) -> UITableViewCell {
  29.         let cell = tv.dequeueReusableCellWithIdentifier("CategoryCell")!
  30.         let cat = data[indexPath.row]
  31.         cell.textLabel?.text = cat.name
  32.         return cell
  33.     }
  34. }

2 Cevaplar

+2 oy
15, Aralık, 2015 yasin tarafından cevaplandı
16, Aralık, 2015 csayin tarafından seçilmiş
 
En İyi Cevap

tableView'in navigationController kullanılarak bir detailView'le nasıl kullanılabileceğine ilişkin basit bir örnek hazırladım. aşağıdaki link üzerinden indirip inceleyebilirsiniz.

hazırladığım örnekde sql veri tabanı kullanmak yerine basit bir array, dictionary yapısı kullandım.
umarım açıklayıcı olur.

https://drive.google.com/file/d/0B_33To7xgYO7eGZ4Mkt2RTdlcFk/view?usp=sharing

16, Aralık, 2015 csayin tarafından yorumlandı
Tesekkur ederim oncelikle. sizin yapida personel listesi ekraninda sorunum yok ancak personel detay sayfasinda sıkınti yasıyorum. sizin yapi uzerinden anlatacak olursam. örnegin; personel 1'e basildiginda açılacak table view ekraninda personel id'si 1 olanın bilgileri tableview'da listelenecek. bu yapıyı kurmaya çalışıyorum.
16, Aralık, 2015 yasin tarafından yorumlandı
yani personel detay sayfasında ikinci bir tableView olacak ve personel bilgileri bu tableView içerisinde listelencek. Doğrumu anlıyorum?
16, Aralık, 2015 csayin tarafından yorumlandı
evet sizin uygulama uzerinden gidecek olursak öyle olacak. veri tabanindan personel listeletmede sorunum yok ama secilen personele ait bilgileri personel detayda tableview'a listeletemiyorum. :?
16, Aralık, 2015 yasin tarafından yorumlandı
o halde verdiğim örnekte DetailViewController.swift içerisindeki tüm kodları, aşağıda verdiğim kodlarla değiştirirseniz istediğiniz sonuca ulaşabilirsiniz.



import UIKit

class DetailViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var selectedPersonalData:Dictionary<String,AnyObject>! = nil
    var tableView:UITableView! = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = UIColor.greenColor()
        self.title = "personel detayı"
        self.tableView = UITableView(frame: self.view.frame)
        self.tableView.backgroundColor = UIColor.clearColor()
        self.tableView.delegate = self
        self.tableView.dataSource = self
        self.tableView.separatorStyle = UITableViewCellSeparatorStyle.SingleLine
        self.tableView.separatorInset = UIEdgeInsetsZero
        self.tableView.allowsMultipleSelection = false
        self.tableView.allowsMultipleSelectionDuringEditing = false
        self.tableView.allowsSelectionDuringEditing = false
        self.tableView.allowsSelection = false
        self.view.addSubview(self.tableView)
    }
    
    override func viewDidDisappear(animated: Bool) {
        self.selectedPersonalData = nil
        self.tableView.reloadData()
    }
    
    override func viewWillAppear(animated: Bool) {
        self.tableView.reloadData()
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if self.selectedPersonalData != nil {
            return self.selectedPersonalData.count
        } else {
            return 0
        }
    }
    
    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        return 50
    }
    
    func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
        return false
    }
    
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var Identifier:String = "cellid"
        var myCell:UITableViewCell! = nil
        if var cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier(Identifier) as? UITableViewCell {
            myCell = cell
        } else {
            myCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: Identifier)
        }
        var rowLabel:String = ""
        switch indexPath.row {
        case 0:
            if let id:Int = self.selectedPersonalData["id"] as? Int {
                rowLabel = String(format: "personel no: %i", id)
            }
        case 1:
            if let name:String = self.selectedPersonalData["name"] as? String {
                rowLabel = String(format: "adı: %@", name)
            }
        case 2:
            if let lastname:String = self.selectedPersonalData["lastname"] as? String {
                rowLabel = String(format: "soyadı: %@", lastname)
            }
        case 3:
            if let birthday:String = self.selectedPersonalData["birthday"] as? String {
                rowLabel = String(format: "doğum yılı: %@", birthday)
            }
        default:
            break
        }
        myCell.textLabel?.textColor = UIColor.blackColor()
        myCell.textLabel?.font = UIFont(name: "Arial", size: myCell.frame.size.height * 0.4)
        myCell.textLabel?.text = rowLabel
        return myCell
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
16, Aralık, 2015 csayin tarafından yorumlandı
çok teşekkur ederim yardimlariniz ve ayirdiginiz vakit icin. :)
16, Aralık, 2015 yasin tarafından yorumlandı
ricaederim. kolay gelsin. :)
+2 oy
16, Aralık, 2015 ibolat tarafından cevaplandı

Merhaba,

Daha öncelerde yapmış olduğum bir uygulamam var mantık şu şekilde örnek olarak cihazları bi tableview ekranın da listeliyorum ve bu liste içinden bir cihaza tıkladığım zaman başkabir view e giderek cihaza ait bilgileri gösteriyor yanlış anlamadıysam sendeki yapıda aşağı yukarı böyle yapıyı zaten kurdğunu söylüyorsun bende tableview kısmını paylaşıyorum. Umarım yardımcı olur.

var selected:Int = 0

func numberOfSectionsInTableView(tableView: UITableView) -> Int {

    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    return  myDevices.count

}


func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

    cell.textLabel?.text = (JC.myDevices[indexPath.row]["name"] as? String)! + " - " + (JC.myDevices[indexPath.row]["location"] as? String)!
    print(JC.myDevices[indexPath.row]["name"] as! String)

    // bu arada name ve locationa göre table view e yazdırıyorum

    return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    tableView.deselectRowAtIndexPath(indexPath, animated: true)
    selected = indexPath.row
    print(selected)

}

---------------- myDevices bir dizi ve başa bir view Controlde oluşturuldu Json ile cihazlar parse ediyor ------------------------

//Kodun bir kısmı anlamak açısından

var myDevices:NSArray = []

if let parseJSON = json{

                        self.myDevices = parseJSON["devices"] as! NSArray
                        print(self.myDevices[0]["name"])

                    }
16, Aralık, 2015 csayin tarafından yorumlandı
verdiginiz bilgiler icin tesekkur ederim oncelikle. yapilarin mantiklari  hemen hemen ayni yalniz. sizin sistemdeki gibi cihaza tikladiginizda cihaza ait ozelliklerin gosterildigi sayfada cihazin ozellikleride tableview'da listelenmesini istiyorum.
16, Aralık, 2015 ibolat tarafından yorumlandı
Bendeki yapı aşağıdaki gibi tableview de ilgili cihaza tıkladıktan sonra o cihazla ilgili bilgileri viewDidLoad anında ekrandaki text lere  yazıyorum bu mantıkta sizde bir tableview oluşturup bilgileri oraya yazdırırsanız sanırım olur istediğiniz eğer doğru anlaşabildiysek :)

override func viewDidLoad() {

       
        txtCihazAdi.text = (JC.myDevices[selected]["name"] as? String)!
        txtCihazKonumu.text = (JC.myDevices[selected]["location"] as? String)!
        

}
16, Aralık, 2015 csayin tarafından yorumlandı
anlaştık hocam. :) sizin mantikla uzerine gittim. Yasin bey'de kodu yukarida vermis zaten halloldu simdi :)
...