简体   繁体   中英

Issue fetching data in custom cell class from firebase using Swift

I have made a custom cell class which fetches data from firebase. Everything's working fine but what happens is when new data is added, is gets displayed at the bottom not the top. In the code i have mentioned to insert new item to index path 0. Still the code is not working

Here's the code..

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate {

    @IBOutlet weak var save: UIButton!
    @IBOutlet weak var table: UITableView!

    var firebase = Firebase(url: "https://meanwhile.firebaseio.com")
    var messages = [String]()
    var uid:String = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        var localArray = [String]()
        firebase.observeEventType(.ChildAdded, withBlock: { snapshot in

            //print(snapshot.value)

            let msgText = snapshot.value.objectForKey("text") as! String
            localArray.insert(msgText, atIndex: 0)
            self.messages = localArray
            self.table.reloadData()
        }
     }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return messages.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = self.table.dequeueReusableCellWithIdentifier("Vish", forIndexPath: indexPath) as! CustomTableViewCell

        let fdata = self.messages[indexPath.item]
       cell.data.text = fdata as? String

        return cell
     }
}

I don't see the code here, but you mention you are using a custom table cell to load data.

If you are loading data inside of your CustomTableViewCell class, you either have to be very careful about how you do it, or move the data loading for the cells elsewhere.

This is because of dequeueReusableCellWithIdentifier . UITableView does not create a UITableViewCell for ever row of the table, but instead it maintains a smaller queue of cells that it reuses to reduce memory usage and increase performance.

The returned UITableViewCell object is frequently one that the application reuses for performance reasons.

Check if you are sharing state (that you didn't expect to be) and/or have race-conditions inside of your CustomTableViewCell .

These bugs often manifest as table view data appearing in the wrong cell.

Source: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewDataSource_Protocol/index.html#//apple_ref/occ/intfm/UITableViewDataSource/tableView:cellForRowAtIndexPath :

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM