InfinityExpandableTableTree icon indicating copy to clipboard operation
InfinityExpandableTableTree copied to clipboard

Unable to reload the data at runtime.

Open sazidIqabal opened this issue 7 years ago • 6 comments

How to reload the data with updated data at runtime?

I am trying to reload the data after the tap on didselectRowAtIndexPath method table reload fine but when I am scrolling the table than crash occurs in below method

public func cellIdentifierUsingTableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> Node{ return arrayVisibles[indexPath.row] }

Can you please send the solution to the problem, I am stuck in solving the problem

sazidIqabal avatar Mar 16 '18 11:03 sazidIqabal

Can you please send a demo project with issue. So I can resolve quickly. 

Sent from Yahoo Mail for iPhone

On Friday, March 16, 2018, 5:06 PM, Mohd Sazid [email protected] wrote:

How to reload the data with updated data at runtime?

I am trying to reload the data after the tap on didselectRowAtIndexPath method table reload fine but when I am scrolling the table than crash occurs in below method

public func cellIdentifierUsingTableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> Node{ return arrayVisibles[indexPath.row] }

Can you please send the solution to the problem, I am stuck in solving the problem

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

KiranJasvanee avatar Mar 16 '18 11:03 KiranJasvanee

I only want to reload the data as normally we do

sazidIqabal avatar Mar 16 '18 12:03 sazidIqabal

It’s because I unable to reproduce the issue. 

Sent from Yahoo Mail for iPhone

On Friday, March 16, 2018, 5:44 PM, Mohd Sazid [email protected] wrote:

I only want to reload the data as normally we do

— You are receiving this because you commented.

Reply to this email directly, view it on GitHub, or mute the thread.

KiranJasvanee avatar Mar 16 '18 12:03 KiranJasvanee

import UIKit import KJExpandableTableTree

class POIPlacesVC: UIViewController, UITableViewDelegate, UITableViewDataSource { // KJ Tree instances ------------------------- var arrayTree:[Parent] = [] var kjtreeInstance: KJTree = KJTree()

@IBOutlet weak var tblList: UITableView!
@IBOutlet weak var viewHeader: UIView!
@IBOutlet weak var lblHeader: UILabel!
var arrayParents: NSArray?

override func viewDidLoad() {
    super.viewDidLoad()
    

// let filepath: String? = Bundle.main.path(forResource: "Tree", ofType: "json") // let url = URL(fileURLWithPath: filepath ?? "") // // var jsonData: Data? // do { // jsonData = try Data(contentsOf: url) // }catch{ // print("error") // } // // var jsonDictionary: NSDictionary? // do { // jsonDictionary = try JSONSerialization.jsonObject(with: jsonData!, options: .init(rawValue: 0)) as? NSDictionary // }catch{ // print("error") // } // //// var arrayParents: NSArray? // if let treeDictionary = jsonDictionary?.object(forKey: "Tree") as? NSDictionary { // if let arrayOfParents = treeDictionary.object(forKey: "Parents") as? NSArray { // arrayParents = arrayOfParents // } // }

    if let arrayOfParents = arrayParents {
        kjtreeInstance = KJTree(parents: arrayOfParents, childrenKey: "Children", expandableKey: "Expanded", key: "Id")

// kjtreeInstance = KJTree(parents: poiDummyDat as NSArray, childrenKey: "Children", expandableKey: "Expanded", key: "Id") } kjtreeInstance.isInitiallyExpanded = true kjtreeInstance.animation = .fade

    print(arrayParents?.count)
    tblList.delegate = self
    tblList.dataSource = self
    tblList.rowHeight = UITableViewAutomaticDimension
    tblList.estimatedRowHeight = 44
    
}

func resetTblData() {
    if let arrayOfParents = arrayParents {
        kjtreeInstance = KJTree(parents: arrayOfParents, childrenKey: "Children", expandableKey: "Expanded", key: "Id")
    }
    
   // kjtreeInstance.isInitiallyExpanded = true
   // kjtreeInstance.animation = .fade

    
    print(arrayParents?.count)
    tblList.delegate = self
    tblList.dataSource = self
    tblList.rowHeight = UITableViewAutomaticDimension
    tblList.estimatedRowHeight = 44
   // tblList.reloadData()
}

@IBAction func tapBack(_ sender: UIButton) {
    self.navigationController?.popViewController(animated: true)
}




@IBAction func tapToSeeMap(_ sender: UIButton) {

// let mapVC = self.storyboard?.instantiateViewController(withIdentifier: "POIMapsVC")as! POIMapsVC // self.navigationController?.pushViewController(mapVC, animated: true) }

}

extension POIPlacesVC {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let total = kjtreeInstance.tableView(tableView, numberOfRowsInSection: section)
    return total
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let node = kjtreeInstance.cellIdentifierUsingTableView(tableView, cellForRowAt: indexPath)
    let indexTuples = node.index.components(separatedBy: ".")
    
    if indexTuples.count == 1  {
        
        // Parents
        let cellIdentifierParents = "ParentsTableViewCellIdentity"
        var cellParents: ParentsTableViewCell? = tableView.dequeueReusableCell(withIdentifier: cellIdentifierParents) as? ParentsTableViewCell
        if cellParents == nil {
            tableView.register(UINib(nibName: "ParentsTableViewCell", bundle: nil), forCellReuseIdentifier: cellIdentifierParents)
            cellParents = tableView.dequeueReusableCell(withIdentifier: cellIdentifierParents) as? ParentsTableViewCell
        }
        cellParents?.cellFillUp(indexParam: node.index, tupleCount: indexTuples.count)
        cellParents?.selectionStyle = .none
        
        if node.state == .open {
            cellParents?.buttonState.setImage(UIImage(named: "minus"), for: .normal)
        }else if node.state == .close {
            cellParents?.buttonState.setImage(UIImage(named: "plus"), for: .normal)
        }else{
            cellParents?.buttonState.setImage(nil, for: .normal)
        }
        
        return cellParents!
        
    }else if indexTuples.count == 2{
        
        // Parents
        let cellIdentifierChilds = "Childs2ndStageTableViewCellIdentity"
        var cellChild: Childs2ndStageTableViewCell? = tableView.dequeueReusableCell(withIdentifier: cellIdentifierChilds) as? Childs2ndStageTableViewCell
        if cellChild == nil {
            tableView.register(UINib(nibName: "Childs2ndStageTableViewCell", bundle: nil), forCellReuseIdentifier: cellIdentifierChilds)
            cellChild = tableView.dequeueReusableCell(withIdentifier: cellIdentifierChilds) as? Childs2ndStageTableViewCell
        }
        cellChild?.cellFillUp(indexParam: node.index)
        cellChild?.selectionStyle = .none
        
        if node.state == .open {
            cellChild?.buttonState.setImage(UIImage(named: "minus"), for: .normal)
        }else if node.state == .close {
            cellChild?.buttonState.setImage(UIImage(named: "plus"), for: .normal)
        }else{
            cellChild?.buttonState.setImage(nil, for: .normal)
        }
        
        return cellChild!
        
    }else if indexTuples.count == 3{
        
        // Parents
        let cellIdentifierChilds = "Childs3rdStageTableViewCellIdentity"
        var cellChild: Childs3rdStageTableViewCell? = tableView.dequeueReusableCell(withIdentifier: cellIdentifierChilds) as? Childs3rdStageTableViewCell
        if cellChild == nil {
            tableView.register(UINib(nibName: "Childs3rdStageTableViewCell", bundle: nil), forCellReuseIdentifier: cellIdentifierChilds)
            cellChild = tableView.dequeueReusableCell(withIdentifier: cellIdentifierChilds) as? Childs3rdStageTableViewCell
        }
        cellChild?.cellFillUp(indexParam: node.index)
        cellChild?.selectionStyle = .none
        
        if node.state == .open {
            cellChild?.buttonState.setImage(UIImage(named: "minus"), for: .normal)
        }else if node.state == .close {
            cellChild?.buttonState.setImage(UIImage(named: "plus"), for: .normal)
        }else{
            cellChild?.buttonState.setImage(nil, for: .normal)
        }
        
        return cellChild!
        
    }
    else if indexTuples.count == 4{
        
        // Parents
        let cellIdentifierChilds = "Childs4thStageTableViewCellIdentity"
        var cellChild: Childs4thStageTableViewCell? = tableView.dequeueReusableCell(withIdentifier: cellIdentifierChilds) as? Childs4thStageTableViewCell
        if cellChild == nil {
            tableView.register(UINib(nibName: "Childs4thStageTableViewCell", bundle: nil), forCellReuseIdentifier: cellIdentifierChilds)
            cellChild = tableView.dequeueReusableCell(withIdentifier: cellIdentifierChilds) as? Childs4thStageTableViewCell
        }
        cellChild?.cellFillUp(indexParam: node.index)
        cellChild?.selectionStyle = .none
        
        if node.state == .open {
            cellChild?.buttonState.setImage(UIImage(named: "minus"), for: .normal)
        }else if node.state == .close {
            cellChild?.buttonState.setImage(UIImage(named: "plus"), for: .normal)
        }else{
            cellChild?.buttonState.setImage(nil, for: .normal)
        }
        
        return cellChild!
        
    }
    else{
        // Childs
        // grab cell
        var tableviewcell = tableView.dequeueReusableCell(withIdentifier: "cellidentity")
        if tableviewcell == nil {
            tableviewcell = UITableViewCell(style: .default, reuseIdentifier: "cellidentity")
        }
        tableviewcell?.textLabel?.text = node.index
        tableviewcell?.backgroundColor = UIColor.yellow
        tableviewcell?.selectionStyle = .none
        return tableviewcell!
    }
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let node = kjtreeInstance.cellIdentifierUsingTableView2(tableView, cellForRowAt: indexPath)
    let indexTuples = node.index.components(separatedBy: ".")
    if indexTuples.count == 3 {
        print(indexTuples)
        print(node.index)
        let firstLevelData = arrayParents![Int(indexTuples.first!)!] as! [String : Any] //State Level DAta
        //print(firstLevelData.count)
        print(firstLevelData)
        let secondLavelData = firstLevelData["Children"] as! NSArray
        print(secondLavelData[Int(indexTuples[1])!])
        let thirdLevelData = secondLavelData[Int(indexTuples[1])!] as! [String : Any]// Community Level Data
        print(thirdLevelData["Children"])
        print(route2Data)
        
        let arrPois = thirdLevelData["Children"] as! NSArray

// let lastPoi = arrPois.lastObject as! [String : Any]// replace with current poi tupple value let lastPoi = arrPois[Int(indexTuples[2])!]as! [String : Any]//.lastObject as! [String : Any] let detailsPOI = lastPoi["details"]as! [String : Any] print(lastPoi) print(arrPois) print(detailsPOI) print(detailsPOI["diversion"]) print(detailsPOI["id"])

        for dict in thirdLevelData["Children"]as! NSArray {
            print(dict)
            let data = dict as! [String : Any]
            print(data["diversion"])
        }
        
        
        let firstLevelData1 = route2Data[0] as! [String : Any]
        let secondLavelData1 = firstLevelData1["Children"] as! NSArray
        let thirdLevelData1 = secondLavelData1[0] as! [String : Any]
        let arrPois1 = thirdLevelData1["Children"] as! NSArray
        let firstPoi1 = arrPois1.firstObject as! [String : Any]
        let detailsPOI1 = firstPoi1["details"]as! [String : Any]
        if detailsPOI["id"]as! String == detailsPOI1["id"]as! String {
            print("can be switch other route")
           // arrayParents![Int(indexTuples.first!)!] = route2Data
            var arrRouteData: Array<Dictionary<String,Any>> = arrayParents as! Array<Dictionary<String,Any>>
            arrRouteData.remove(at: Int(indexTuples.first!)!)
            arrRouteData.insert(firstLevelData1, at: Int(indexTuples.first!)!)
            arrayParents = arrRouteData as! NSArray
            resetTblData()
            
        }
        
        
        

        
        

// for dict in thirdLevelData["Children"]as! NSArray { // print(dict) // let data = dict as! [String : Any] // // arrDetailsData.append(data["data"] as! [String : String]) // } // print(arrDetailsData) }

}

sazidIqabal avatar Mar 16 '18 12:03 sazidIqabal

I have sent the whole class and In didSelectRowAtIndexPath I need nod so I have use the same in above without expending/collapsing the cell

sazidIqabal avatar Mar 16 '18 12:03 sazidIqabal

Hi, Have any solution for that

sazidIqabal avatar Mar 20 '18 07:03 sazidIqabal