1

私は、エンティティ属性とnumに基づいていくつかのセクションを持つテーブルビューを設定することに遭遇しました。同じエンティティの別の属性に基づくセルの私は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 
} 

}

答えて

1

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

私を助ける時間をとってくれてありがとう、ありがとう。しかし、私はあなたの実装を実行すると、 "インデックスの範囲外"と言う致命的なエラーがあります。なぜ私に教えてくれますか? –

+0

あなたはエラーを返す正確なコードを投稿できますか? –

+0

オーバーライドfunc tableView(_ tableView:UITableView、numberOfRowsInSectionセクション:Int) - > Int { 戻り値Int(storedFloors [section-1] .numberOfRooms)//インデックスが範囲外です } –

関連する問題