Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何从获取请求数组结果构建字典?_Swift_Core Data_Swift3_Nsmanagedobjectcontext_Nsfetchrequest - Fatal编程技术网

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

Swift 如何从获取请求数组结果构建字典?,swift,core-data,swift3,nsmanagedobjectcontext,nsfetchrequest,Swift,Core Data,Swift3,Nsmanagedobjectcontext,Nsfetchrequest,我无意中建立了一个表视图,其中包含基于实体属性的多个部分,以及基于同一实体的另一个属性的单元格数。我有一个名为Floors的实体(可以存在多个实例),它有两个属性:floor number和floor上的房间数。我执行了一个获取请求,它返回了数组。我的知识还不足以计算如何设置这样的字典:[floorNumber:numberOfRoomsInFloor]这样我就可以用它来定义表中的节数和每个节中的行数。我尝试过,但失败了,我确实在网站上查看过线程,但我真的没有看到一个适合我的解决方案。如果有人能

我无意中建立了一个表视图,其中包含基于实体属性的多个部分,以及基于同一实体的另一个属性的单元格数。我有一个名为Floors的实体(可以存在多个实例),它有两个属性:floor number和floor上的房间数。我执行了一个获取请求,它返回了数组。我的知识还不足以计算如何设置这样的字典:[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
}
class RoomAndAlarmTypeTableVC:UITableViewController,NSFetchedResultsControllerDelegate{
//标记:-属性
私有var managedObjectContext:NSManagedObjectContext!
私有var storedFloors=[楼层]()
private var floorsAndRooms=[String:String]()
//马克:行动
重写func viewDidLoad(){
super.viewDidLoad()
managedObjectContext=(UIApplication.shared.delegate为!AppDelegate)。persistentContainer.viewContext
loadFloorData()
tableView.delegate=self
tableView.dataSource=self
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
私有函数loadFloorData(){
let floorRequest:NSFetchRequest=Floors.fetchRequest()
做{
storedFloors=尝试managedObjectContext.fetch(floorRequest)
打印(“\(storedFloors)”)
}抓住{
打印(“无法从core\(error.localizedDescription)加载数据”)
}
}
//标记:-表视图数据源
重写func numberOfSections(在tableView:UITableView中)->Int{
返回storedFloors.count
}
重写func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int{
let Specific Floor=存储楼层[截面]
返回整数(具体楼层、房间数)
}
重写func tableView(tableView:UITableView,cellForRowAt indexath:indexPath)->UITableViewCell{
让cell=tableView.dequeueReusableCell(标识符为:“house cell”,for:indexPath)作为!ViewRooomNumberCell
让tableSections=storedFloors[indexPath.section]
设floorritem=tableSections.numberOfRooms[indexPath.row]
让floorNumber=字符串(floorItem.numberOfRooms)
cell.floorNumberTxt.text=floorNumber
返回单元
}

}

假设StoredFloor包含所有楼层(即部分),您不需要字典,只需使用:

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
}

非常感谢你抽出时间来帮助我。但是我有一个致命的错误,当我运行您的实现时,它说“索引超出范围”。你能告诉我为什么吗?你能给出给出错误的确切代码吗?重写func tableView(utableview:UITableView,numberofrowsinssection:Int)->Int{return Int(storedFloors[section-1].numberOfRooms)//索引超出范围}我的错误:用section(答案中已编辑)替换section-1。这应该感谢你的帮助,这很有效。祝您愉快,先生。