【发布时间】:2021-12-20 11:11:24
【问题描述】:
我很难尝试使用 segue 将 JSON 传递给另一个视图控制器。因此,因为我只能使用准备(用于 segue,发件人),但我无法让我的数据填充我的视图控制器上的插座。下面是我的第一个视图控制器。在 prepare(for segue, sender) 方法中,您可以看到我注释掉的代码不起作用。有什么建议吗?
类 ViewController2 : UIViewController, UITableViewDelegate, UITableViewDataSource {
var pictures : [Hit] = []
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
NetworkMananger.shared.getInfo { [weak self] (results) in
guard let self = self else {return }
switch results {
case .failure(let error):
print(error)
case .success(let pictures):
self.pictures = pictures
DispatchQueue.main.async {
self.tableView.reloadData()
}
}
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "ViewController1"{
if let indexPath = self.tableView.indexPathForSelectedRow{
let vc = segue.destination as! ViewController1
// vc.downloadLabel = String(pictures[indexPath.row].downloads)
// vc.tagsLabel = pictures[indexPath.row].tags
// vc.imageData = UIImage(named: pictures[indexPath.row].previewURL)
}
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = storyboard?.instantiateViewController(identifier: "ViewController1") as? ViewController1
navigationController?.pushViewController(vc!, animated: true)
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return pictures.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell123", for: indexPath) as! firstTableViewCell
cell.label?.text = String(pictures[indexPath.row].downloads)
cell.downloadPictureFromURL(from: pictures[indexPath.row].previewURL)
return cell
}
}
下面是我想要将 JSON 传递给的第二个视图控制器:
类 ViewController1: UIViewController {
var picture : Hit!
@IBOutlet weak var label: UILabel!
@IBOutlet weak var imageData:
UIImageView!
@IBOutlet weak var tagsLabel: UILabel!
@IBOutlet weak var downloadLabel: UILabel!
var cap : String = ""
override func viewDidLoad() {
super.viewDidLoad()
}
}
JSON
struct Response : Codable {
let hits : [Hit]
}
struct Hit : Codable {
let tags : String
let previewURL : String
let downloads : Int
}
【问题讨论】:
-
一个叫“图片”的人是从哪里来的,又是什么?它与 JSON 或您尝试传递给另一个视图控制器的任何内容有什么关系?
-
@ElTomato 是的,它来自 API。如果你能帮助我,我会将它附加到上面的代码中。
-
@ElTomato previewURL 是一个返回图像的字符串,我有一个 HTTP 请求来获取它。
标签: json swift uitableview segue viewcontroller