swift - 如何从获取请求数组结果中构建字典?

标签 swift core-data swift3 nsmanagedobjectcontext nsfetchrequest

我无意中设置了一个 TableView ,其中包含许多基于实体属性和数字的部分。基于同一实体的另一个属性的单元格。我有一个名为 Floors 的实体(可以存在多个实例),它有 2 个属性:楼层数和楼层上的房间数。我执行了一个获取请求,它返回了数组。我的知识不足以弄清楚如何设置这样的字典:[floorNumber: numberOfRoomsInFloor] 所以我可以接受它并定义表中的部分数和每个部分中的行数。我尝试过但失败了,我确实查看了网站上的线程,但我没有真正看到适合我的解决方案。如果有人能花点时间帮助我,那对我来说意义重大。请在下面查看我的代码:

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
}

最佳答案

假设 storedFloors 包含所有楼层(它们是部分),您不需要字典,只需使用:

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

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// this will return the proper number of rows (rooms) for each section
    return storedFloors[section].numberOfRooms
}

关于swift - 如何从获取请求数组结果中构建字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43006969/

相关文章:

ios - 如何将 View Controller 保存在内存中

ios - 保存数据并 swift 展开到另一个 Controller

ios - coreData现有验证

Swift 3.0 二元运算符 '==' 无法应用

ios - 表格 View 中选择和取消选择单元格之间的差异

ios - NSManagedObject setter 给我 [ MyObject setName :]: unrecognized selector sent to instance

ios - 快速更改 uiimageview 背景颜色

swift - 在 Swift 中覆盖文件中的前 N ​​个字节

ios - 出于安全原因,如何在iOS中从内存中删除字符串?甚至需要它还是iOS自己处理

cocoa - 如何将 NSTextField 的值绑定(bind)到 NSObjectController 的内容而不出现错误?