辞書の配列の配列から約150個の要素をロードしています。テーブルビューにすべてのデータを取り込めますが、そのスクロールが遅いときはスクロールします。自分の関数の情報をコンソールに表示すると、スクロールするたびにすべてのデータが返されているように見えます。これは私がうまく読み込めない(非同期的に)か、私の機能を変更する必要がありますか?テーブルビューのスロー/スタッタスクロール
func querySections() -> [String] {
var sectionsArray = [String]()
for task in tasks {
let dueTimes = task.dueTime
sectionsArray.append(dueTimes)
}
let uniqueSectionsArray = Array(Set(sectionsArray.sort()))
// print(uniqueSectionsArray)
return uniqueSectionsArray
}
func queryDueTimes(section:Int) -> [Task] {
var sectionItems = [Task]()
for task in tasks {
let dueTimes = task.dueTime
if dueTimes == querySections()[section] {
sectionItems.append(task)
}
}
print(sectionItems)
return sectionItems
}
// MARK: - Table view data source
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return querySections()[section]
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return querySections().count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return queryDueTimes(section).count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TaskCell", forIndexPath: indexPath) as! TaskCell
// Configure the cell...
cell.selectionStyle = .None
let times = queryDueTimes(indexPath.section)
let task = times[indexPath.row]
cell.label.text = task.title
if task.done == true {
cell.checkBox.image = UIImage(named: "checkedbox")
cell.detailLabel.text = "Completed By: \(task.completedBy)"
}
else {
cell.checkBox.image = UIImage(named: "uncheckedbox")
cell.detailLabel.text = ""
}
cell.delegate = self
return cell
}
基本的に、querySections
で、Iは、各タスクのdueTimesの全てを反復だと、私は重複の全てを除外できるように集合のアレイにそれらを変更します。これは私のすべてのセクションを私に与えている。 queryDueTimes
については、タスクを繰り返してセクションにマッチングさせています。
私はviewDidLoad
で関数を呼び出すことについて考えていましたが、それは機能しません(関数の外部からアクセスできる他の空の配列に渡そうとすると空の配列を与え続けます) viewDidLoadの(私が行う方法を知っている限り)tアクセスセクション(queryDueTimes
)
更新1: 間違いは私の目的です。私は、タスクは配列の配列であり、その配列がタスクの配列(各タスクのすべてのプロパティを持つ構造体)であると言いました。アプリケーションを読み込むと、バックエンドのすべてのタスクがローカルの配列に追加されます(「タスク」)。これを動作させるための配列を用意する必要がありますか、何とか私のコードを修正して動作させることはできますか?
アップデート2:私はそれらを印刷するとき、私はsectionTimes
とtasksInSectionArray
として空の配列を取得しています
。
var sectionTimes = [String]()
var tasksInSectionArray = [[Task]]()
var tasks = [Task]() {
didSet {
tableView?.reloadData()
}
}
func updateTableView() {
sectionTimes = Set(tasks.map{$0.dueTime}).sort()
tasksInSectionArray = sectionTimes.map{section in tasks.filter{$0.dueTime == section}}
print(sectionTimes)
print(tasksInSectionArray)
tableView.reloadData()
}
override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sectionTimes[section]
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return sectionTimes.count
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return tasksInSectionArray[section].count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("TaskCell", forIndexPath: indexPath) as! TaskCell
// Configure the cell...
cell.selectionStyle = .None
let task = tasksInSectionArray[indexPath.section][indexPath.row]
推測しないでください。推測しないでください。楽器を使用!スクロール中に何が時間を費やしているかを正確に教えてくれます。それであなたはあなたの注意をどこに集中させるかを知っています。 – matt
私はそれをどのように使用するかまだまだ実際にはわかりません。私はまだiOS用のSwiftで開発するのがとても新しいです。あなたは正しい方向に1つまたは2つを提供することで私を助けることができますか? –
残念ながら、DManはそれを目の当たりにしてあなたの問題を解決しているようです。インストゥルメントを使用することを学ぶ方が良いと思うので、それは悪いことです! :))))))) – matt