2017-03-25 42 views
0

我有一些問題需要一個目前我不知道的解決方案。 我執行一個獲取請求,該請求返回具有2個屬性(樓層號和房間數量)的Floors實體對象數組。我想用與層數和數量相對應的部分的數量來製作表格。每個部分的行數對應於每層的房間數量。我使用一個結構和2在循環中分隔表的屬性。結果令我感到困惑:如果我聲明一層它工作,並且下一個vc中的選取器顯示「0」層。如果我給它分配2個房間,我會得到一個巨大的打印響應和一個有10行的表格。請看下面的代碼和提供的圖片,如果有人能幫助我會感激。使用獲取請求結果數組和結構來設置UITableView部分和行的問題

class RoomAndAlarmTypeTableVC: UITableViewController, NSFetchedResultsControllerDelegate { 

//MARK: - Properties 

private var managedObjectContext: NSManagedObjectContext! 

private var storedFloors = [Floors]()  

private var resultsArray = [Results]() 

//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) 
     //   tableView.reloadData() 
     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 resultsArray.count 
} 

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return resultsArray[section].sectionObjects.count 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "house cell", for: indexPath) as! ViewRooomNumberCell 

    cell.floorNumberTxt.text = String(storedFloors[indexPath.section].floorNumber) 

    return cell 
} 

override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    return resultsArray[section].sectionName 
} 

}

[![enter image description here][1]][1] 
[![enter image description here][2]][2] 

回答

1

storedFloors是managedObjects的陣列,其中已經有你需要的所有信息。部分的數量是storedFloors.count,行數是storedFloors[sectionIndex].numberOfRooms。建立一個單元格的地板是存儲地板[indexPath.section]。地板編號和房間號碼是簡單的indexPath.row

您創建的其他對象是錯誤和混淆的,應該刪除。

+0

謝謝你的回答。它是完全有道理的,但它不能正確顯示數據。如果我將2個房間分配到1個樓層,我會在每行中獲得一個帶有2行「1」的表格。這是我嘗試過這個結構的原因。我已經用你給我的內容編輯了發佈的代碼。如果你有時間可以請看看它? –

+0

用'cell.floorNumberTxt.text = String(indexPath.row)'替換'cell.floorNumberTxt.text = String(storedFloors [indexPath.section] .floorNumber)' –

+0

嗨。是的,我已經做到了。對於2個房間,每個房間我只有1行,顯示值爲「0」。我還在控制檯中得到一個警告:所有對象都有數據錯誤。所以在構建數據庫方面顯然存在問題。我會發佈一個關於這個問題的新問題,我會在這裏粘貼鏈接。如果你有一點時間看它,也許發現錯誤這將是偉大的。謝謝 –