gpt4 book ai didi

swift - 如果我从 secondviewcontroller 返回,程序会复制 tableview 上的列表

转载 作者:行者123 更新时间:2023-11-28 06:12:49 25 4
gpt4 key购买 nike

我有一个带有 TableView 和位置列表的 View Controller 。如果我触摸列表中的某个位置,我会转到 SecondViewController 场景以查看有关该位置的更多信息。但是当我用后退按钮返回时,程序复制了我原来的列表,所以这些地方在列表中出现了两次,然后是三次,四次......每次如果我转到 SecondViewController 然后返回。

这是我的 View Controller :

import UIKit

var nev: [String] = []
var cim: [String] = []
var ar: [String] = []


class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var myIndex: Int?

@IBOutlet weak var tableView: UITableView!


override func viewDidLoad() {
super.viewDidLoad()

let url = Bundle.main.url(forResource: "pubok", withExtension: "json")
do {
let allContactsData = try Data(contentsOf: url!)
let allContacts = try JSONSerialization.jsonObject(with: allContactsData, options: JSONSerialization.ReadingOptions.allowFragments) as! [String : AnyObject]
if let arrJSON = allContacts["Pubok"] as? [[String : Any]] {
for index in 0...arrJSON.count-1 {

let aObject = arrJSON[index] as! [String : Any]

nev.append(aObject["Hely neve"] as! String)
cim.append(aObject["Cím"] as! String)
ar.append(aObject["Legolcsóbb sör"] as! String)
}
}

self.tableView.reloadData()
}
catch {

}

}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return nev.count
}


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell

cell.nevLabel.text = nev[indexPath.row]
cell.arLabel.text = ar[indexPath.row] + "/0.5l"
return cell
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

let row = (self.tableView.indexPathForSelectedRow as NSIndexPath?)?.row

let vc = segue.destination as! SecondViewController

vc.myIndex = row
}



}

这是我的 SecondViewController:

import UIKit



class SecondViewController: UIViewController {

var myIndex: Int?


@IBOutlet weak var secondnevLabel: UILabel!
@IBOutlet weak var secondcimLabel: UILabel!

override func viewDidLoad() {
super.viewDidLoad()

secondnevLabel.text = nev[myIndex!]
secondcimLabel.text = cim[myIndex!]


}
}

这是我的 TableViewCell:

import UIKit

class TableViewCell: UITableViewCell {


@IBOutlet weak var nevLabel: UILabel!
@IBOutlet weak var arLabel: UILabel!




override func awakeFromNib() {
super.awakeFromNib()

}

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

}
}

And this is the main.storyboard

最佳答案

问题是你有三个全局数组,所以当你移动到下一个 View Controller 时它们持续存在并且当你返回时它们仍然存在。它们不仅仍然存在,而且还拥有您第一次加载 View 时放入其中的所有数据。现在,您要返回并将所有相同的数据附加到数组,留下两倍的数据,然后是三倍,依此类推。

import UIKit

var nev: [String] = [] // Global array declared outside the class
var cim: [String] = [] // Global array declared outside the class
var ar: [String] = [] // Global arrayy declared outside the class

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var myIndex: Int?

解决方案

将这些数组移动到你的类中,并将它们传递给下一个 View Controller ,方式与传递所选索引的值的方式相同——在下一个 View Controller 中有一个相应的数组,并在 中分配它的值准备(对于 segue: )

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

var nev: [String] = [] // Array is now inside the class
var cim: [String] = [] // Array is now inside the class
var ar: [String] = [] // Array is now inside the class

var myIndex: Int?

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

let row = (self.tableView.indexPathForSelectedRow as NSIndexPath?)?.row

let vc = segue.destination as! SecondViewController

vc.myIndex = row
vc.nev = nev
vc.cim = cim
vc.ar = ar
}

class SecondViewController: UIViewController {

var myIndex: Int?

var nev: [String]?
var cim: [String]?
var ar: [String]?

关于swift - 如果我从 secondviewcontroller 返回,程序会复制 tableview 上的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46025895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com