1

Ich bin über das Einrichten einer Tabellenansicht mit einer Anzahl von Abschnitten auf der Grundlage eines Entitätsattributs und der Zahl gestolpert. von Zellen basierend auf einem anderen Attribut derselben Entität. Ich habe eine Entity namens Floors (mehr als eine Instanz kann existieren) und dies hat 2 Attribute: Etagennummer und Anzahl der Zimmer auf der Etage. Ich habe eine Abrufanforderung ausgeführt und das Array zurückgegeben. Mein Wissen ist nicht gut genug, um herauszufinden, wie man ein Wörterbuch wie folgt aufstellt: [floorNumber: numberOfRoomsInFloor] damit ich es nehmen und die Anzahl der Abschnitte in der Tabelle und die Anzahl der Zeilen in jedem Abschnitt definieren kann. Ich habe es versucht und gescheitert, und ich habe Threads auf der Site angeschaut, aber ich sehe nicht wirklich eine Lösung, die für mich funktionieren könnte. Wenn sich jemand etwas Zeit nehmen und mir helfen könnte, würde es mir viel bedeuten. Bitte haben Sie einen Blick auf mein Code unten:Wie erstellt man ein Wörterbuch aus dem Fetch Request Array Ergebnis?

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 
} 

}

Antwort

1

Unter der Annahme, dass die storedFloors alle Etagen enthält (die Abschnitte) sind Sie nicht das Wörterbuch benötigen, und benutzen Sie einfach:

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 
} 
+0

vielen Dank, dass Sie sich die Zeit genommen haben, mir zu helfen. aber ich habe einen fatalen Fehler, der sagt "Index außerhalb der Grenzen", wenn ich Ihre Implementierung ausführen. Kannst du mir bitte sagen warum? –

+0

können Sie den genauen Code posten, der Ihnen den Fehler gibt? –

+0

überschreiben func tableView (_ tableView: UITableView, numberOfRowsInSection Abschnitt: Int) -> Int { Rückkehr Int (storedFloors [Abschnitt - 1] .numberOfRooms) // Index außerhalb des Bereichs } –

Verwandte Themen