import UIKit
import MapKit
import CoreLocation
class CourseClass2: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak
var map: MKMapView!
@IBOutlet weak
var mapCourse: UIImageView!
@IBOutlet weak
var tableView: UITableView!
struct User {
var name: String
var images: UIImage
var coordinate: (Double, Double)
var type: String
var address: String
}
var rows = 0
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
insertRowsMode3()
}
func insertRowsMode2() {
for i in 0.. < users.count {
insertRowMode2(ind: i, usr: users[i])
}
}
func insertRowMode2(ind: Int, usr: User) {
let indPath = IndexPath(row: ind, section: 0)
rows = ind + 1
tableView.insertRows(at: [indPath], with: .right)
}
func insertRowsMode3() {
rows = 0
insertRowMode3(ind: 0)
}
func insertRowMode3(ind: Int) {
let indPath = IndexPath(row: ind, section: 0)
rows = ind + 1
tableView.insertRows(at: [indPath], with: .right)
guard ind < users.count - 1
else {
return
}
DispatchQueue.main.asyncAfter(deadline: .now() + 0.15) {
self.insertRowMode3(ind: ind + 1)
}
}
func numberOfSections( in tableView: UITableView) - > Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) - > Int {
return rows
}
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) - > UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell",
for: indexPath) as!MyTableViewCell
let user = users[indexPath.row]
cell.MyImage.image = user.images
cell.MyLabel.text = user.name
cell.MyTypeLabel.text = user.type
return (cell)
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "goToLast", sender: users[indexPath.row])
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) - > CGFloat {
return 100
}
override func prepare(
for segue: UIStoryboardSegue, sender: Any ? ) {
if segue.identifier == "goToLast" {
guard
let vc = segue.destination as ? FinalClass
else {
return
}
let guest = segue.destination as!FinalClass
if let user = sender as ? User {
guest.local = user.name
guest.localImage = user.images
guest.localType = user.type
guest.localAddress = user.address
}
}
}
@IBAction func IndTapped(_ sender: Any) {
self.performSegue(withIdentifier: "goBack", sender: self)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
大家好,这是我得到错误的ViewController的代码,我添加了一个带有特定动画的tableView但是当我更改视图而不是回来时dismiss(animated: true, completion: nil)
应用程序崩溃,因为有与行数据有些不一致。正如您所看到的,当我第一次访问此CourseClass2
控制器时,我正在insertRowsMode3
中调用viewDidAppear
来设置行。
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
insertRowsMode3()
}
问题是当我回来时,行数据与我用零初始化它并不相同,并且不会调用viewDidAppear。 我知道错误但我不知道如何更改我的代码以使其工作。我真的需要帮助。
应用程序正好在这个函数中粉碎
func insertRowMode3(ind:Int) {
let indPath = IndexPath(row: ind, section: 0)
rows = ind + 1
tableView.insertRows(at: [indPath], with: .right)
guard ind < users.count-1 else { return }
DispatchQueue.main.asyncAfter(deadline: .now()+0.15) {
self.insertRowMode3(ind: ind+1)
}
}
此处tableView.insertRows(at: [indPath], with: .right)
答案 0 :(得分:0)
您在第0部分中提到了无效的行数: 在insertRowMode3中,您正在插入行但不更新表视图。 因此,即使更新,您的表视图也会在表视图中获得相同的行数,这就是不一致的地方。
使用tableview.beginUpdates(), 然后插入行, 增加你的行值, 然后tableview.endUpdates()
如果它没有帮助你,请告诉我。