UITableView无法从获取请求数组结果中显示正确数量的节和行

时间:2017-03-25 15:54:52

标签: swift uitableview swift3 uipickerview nsfetchrequest

我认为我的问题涉及多个VC。 在VC表中,我执行一个返回Floor对象数组的获取请求。该实体有2个属性(楼层数和楼层的房间数)。如果我分配2个楼层(0和1),它可以工作并打印出来。下一个VC包含一个显示楼层数的选择器和一个用于分配每层楼房间数的文本框。此函数必定存在问题,因为只有在选择了选择器的第一项时才会调用它(打印结果)。如果我有2个楼层(选择器中的0和1)并且选择了楼层1,则该功能不会将房间值分配给任何其他楼层。这个功能只适用于第一个楼层,并不重要。我已经看过如何修改函数但没有找到任何合适的解决方案。 第二个问题是表视图只显示一行。让我们说,对于0楼我分配1;而不只是一行出现1。如果有人能帮助我,那对我来说意义重大。谢谢 请参阅以下代码了解选择器功能:

 @IBAction func setTheFloors(_ sender: UIButton) {
    if storedFloors.count > 0 {
        if storedFloors.first?.floorNumber == pickedFloor! {
            storedFloors.first?.numberOfRooms = roomNumberValue
            print("\(storedFloors.first?.floorNumber) + \(storedFloors.first?.numberOfRooms)")
        }
    }
    do {
        try managedObjectContext.save()
    } catch {
        fatalError("could not save context because: \(error)")
    }

}


@IBAction func nextStep(_ sender: UIButton) {

}

private func loadFloorData() {
    let floorRequest: NSFetchRequest<Floors> = Floors.fetchRequest()
    do {
        storedFloors = try managedObjectContext.fetch(floorRequest)
    } catch {
        print("could not load data from core \(error.localizedDescription)")
    }
}

private func spinnerItems() {
    for i in 0...floorValue! - 1 {
        convertedFloorValues.append(String(i))
    }
}

这段代码用于表格视图。

class RoomAndAlarmTypeTableVC: UITableViewController, NSFetchedResultsControllerDelegate {

//MARK: - Properties

private var managedObjectContext: NSManagedObjectContext!

private var storedFloors = [Floors]()

private var floorsAndRooms = [String: String]()

//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)
        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 storedFloors.count
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let specificFloor = storedFloors[section]
    return Int(specificFloor.numberOfRooms)
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "house cell", for: indexPath) as! ViewRooomNumberCell
    let tableSections = storedFloors[indexPath.section]
    let floorItem = tableSections.numberOfRooms[indexPath.row]
    let floorNumber = String(floorItem.numberOfRooms)
    cell.floorNumberTxt.text = floorNumber
    return cell
}

}

0 个答案:

没有答案