使用获取请求结果数组和结构设置UITableView节和行的问题

时间:2017-03-25 17:58:48

标签: swift uitableview core-data swift3

我有一些问题需要一个我不知道的解决方案。 我执行一个获取请求,返回一个Floors实体对象数组,该实体对象有2个属性(楼层数和房间数)。我想制作一个表格,其中包含与楼层数量和数量相对应的部分数量。每个部分中的行数对应于每层的房间数。我使用struct和2 for in循环来分隔表的属性。结果令我感到困惑:如果我声明一层它工作,并且下一个vc中的一个选择器显示“0”楼层。如果我给它分配2个房间,我得到一个巨大的打印响应和一个10行的表。请看下面的代码和提供的图片,如果有人可以提供帮助,我会很感激。

class RoomAndAlarmTypeTableVC: UITableViewController, NSFetchedResultsControllerDelegate {

//MARK: - Properties

private var managedObjectContext: NSManagedObjectContext!

private var storedFloors = [Floors]()    

private var resultsArray = [Results]()

//MARK: - Actions

override func viewDidLoad() {
    super.viewDidLoad()
    managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    loadFloorData()
    tableView.delegate = self
    tableView.dataSource = self

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

private func loadFloorData() {
    let floorRequest: NSFetchRequest<Floors> = Floors.fetchRequest()
    do {
        storedFloors = try managedObjectContext.fetch(floorRequest)
        //            tableView.reloadData()
        print("\(storedFloors)")

    } catch {
        print("could not load data from core \(error.localizedDescription)")
    }
}



// MARK: - Table view data source

override func numberOfSections(in tableView: UITableView) -> Int {
    return resultsArray.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return resultsArray[section].sectionObjects.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "house cell", for: indexPath) as! ViewRooomNumberCell

    cell.floorNumberTxt.text = String(storedFloors[indexPath.section].floorNumber)

    return cell
}

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return resultsArray[section].sectionName
}

}

[![enter image description here][1]][1]
[![enter image description here][2]][2]

1 个答案:

答案 0 :(得分:1)

storedFloors是一个managedObjects数组,它已经包含了您需要的所有信息。部分的数量为storedFloors.count,行数为storedFloors[sectionIndex].numberOfRooms。要构建一个单元格,地板是存储的楼层[indexPath.section] .floorNumber,房间号只是indexPath.row

您创建的其他对象错误且令人困惑,应删除。