【发布时间】:2017-11-02 13:43:40
【问题描述】:
我正在编写的程序有一个小问题。它的目的是读取一个 .txt 的跟踪名称文件并填充一个 TableView。出于某种原因,switch case 中的 do - catch 语句运行了四次而不是一次。有人可以帮我理解为什么吗? (Swift 和 iOS 的新手。)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
switch np {
case "Acadia":
let filename = "/Users/michaeltheadley/Desktop/Trailr/Data/National/National_Parks/Acadia/acadia_trails.txt"
do {
let contents = try String(contentsOfFile:filename, encoding: String.Encoding.utf8)
count = contents.components(separatedBy: .newlines).count
print("the situation")
// why is this block being executed x4 ??
let lines : [String] = contents.components(separatedBy: .newlines)
for item in lines {
trails_array.append(item)
print(item)
print(trails_array.count)
}
}
catch _ as NSError {
return 0
}
return count
【问题讨论】:
-
numberOfRowsInSection在每次重新加载 tableView 时按每个部分调用。所以要么你多次重新加载你的 tableView,要么你有多个部分。 -
只是一个评论。我不建议您在“numberOfRowsInSection”或其他 tableview/data-source 委托方法中进行复杂的计算。特别是在主队列上。这种方法应该尽可能轻量级,并且处理/磁盘访问应该在后台队列中完成,在 tableView 加载之前。
标签: ios uitableview swift3