화면 중 하나에서이 항목이 필요한 앱을 만들고 있습니다. 되어데이터가 테이블 뷰 섹션에 올바르게 채워지지 않습니다.
var sections = ["Adventure type"]
var categoriesList = [String]()
var items: [[String]] = []
override func viewDidLoad() {
super.viewDidLoad()
categoryTableView.delegate = self
categoryTableView.dataSource = self
Client.DataService?.getCategories(success: getCategorySuccess(list:), error: getCategoryError(error:))
}
func getCategorySuccess(list: [String])
{
categoriesList = list
let count = list.count
var prevInitial: Character? = nil
for categoryName in list {
let initial = categoryName.first
if initial != prevInitial { // We're starting a new letter
items.append([])
prevInitial = initial
}
items[items.endIndex - 1].append(categoryName)
}
for i in 0 ..< count
{
var tempItem = items[i]
let tempSubItem = tempItem[0]
let char = "\(tempSubItem.first)"
sections.append(char)
}
}
func getCategoryError(error: CError)
{
print(error.message)
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return self.sections[section]
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return self.sections.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return self.items[section].count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = categoryTableView.dequeueReusableCell(withIdentifier: "tableCell", for: indexPath)
cell.textLabel?.text = self.items[indexPath.section][indexPath.row]
return cell
}
나는 부분과의 tableview를 사용했다하지만 내가 데이터 (항목 배열)을로드하고 있기 때문에이 오류의 이유는 return self.items[section].count
에 런타임 오류를 생산 서버 다음에 섹션 배열을 채 웁니다. tableview가 생성되면 섹션과 items 배열이 비어 있습니다. 그래서 오류가 발생합니다. 저는 iOS를 처음 접했고 tableview의 섹션에서 데이터를 조정하는 방법을 이해하지 못했습니다.
- 누군가 내가이 작업을 수행하는 더 나은 방법을 제안 할 수 있습니까?
- 서버 호출이 얼마나 많은 항목을 반환할지 모르는 경우 섹션의 행 수는 얼마입니까?
- 또한 서버 호출이 실패하고 데이터가 반환되지 않을 때 케이스를 덮고 싶습니다. 테이블 뷰를 숨기고 (그리고 오류 메시지를 표시하는 것만으로도 충분합니까?)
도움을 주시면 감사하겠습니다. 이 작동하는 경우
dataSource를 null로 만들면 쓸모가 없으므로 기본값을 제공해야만 더 많은 코드가 추가됩니다 – zombie