Я заполняю свой tableView динамическими данными JSON. Я разработал собственный tableviewCell, где я скрываю представление и показываю только при наличии данных. Во-первых, я должен показать имена всех сотрудников в tableView, позже, когда им назначен какой-либо проект, затем я должен показать детали проекта в этом DetailsView, как показано ниже.
Здесь я вызвал api projectDetails в forLoop для employeeIds в EmployeeList.
Я сохраняю детали проекта в массиве и присваиваю значения строкам с помощью projectListArray[indexPath.row]
в cellForRow . Но проблема в том, что, когда некоторым сотрудникам не назначен какой-либо проект, я получаю ошибку Индекс вне диапазона . ExpandableCell
останется свернутым. Надеюсь, мне ясно до сих пор.
Таким образом, только сотрудники, которым назначены проекты, будут показывать расширенный ExpandableCell
, для других ячейка будет свернута.
public func getEmployeesList(request : EmployeesListRequest) { // api call to get Employees List
// if EmployeeListArray is not till and if response is SUCCESS, give ProjectDetails api call
if response.isSuccess() {
for beds in array {
self.getProjectDetails(request: self.projectDetailsRequest)
//refresh TableView
}
}
}
public func getProjectDetails(request : ProjectDetailsRequest) {
if Network.response(response: response, errorMsg: nil) {
let object = response.obj as? ProjectDetails
if response.isSuccess() {
if response.obj != nil {
self.projectDetailsArray.append(object!)
self.projectEmployeeIdArray.append(object.employeeId!)
}else{
print(“Project Object is nil\n")
}
}
}
}
// In cellForRowAt indexPath
// Displayed Employee names in NamesView now want to display project details
var expandedRows = Set<IndexPath>()
for id in projectEmployeeIdArray {
if employeeId == id {
cell.projectDetailsView.isHidden = false
expandedRows.insert(indexPath)
if !projectDetailsArray.isEmpty{
let sortedData = projectDetailsArray.sorted(by:{$0.employeeId < $1.employeeId}) //since the dictionary was not sorted. //Error if some ids nil
let details = sortedData[indexPath.row] //Error because some employees do not project assigned.
cell.projectLabel.text = details.projectName!
}else{
expandedRows.remove(indexPath)
}
}
}
Я также пытался projectDetailsArray[safe: indexPath.row]
, но ему не удалось назначить детали проекта проекта. Если бы в индексах 0 и 2 были детали проекта, он дал бы нулевые данные для индекса 2.
Требуется вывод: