Swift 3 数据从主控制器到带有 Firebase 和 segue 的视图控制器



我是ios dev的新手,我正在尝试开发我的第一个应用程序! :) 目前为止,一切都好。。。 现在,我正在尝试将数据从主控制器传递到项目详细信息视图。

似乎我无法弄清楚我做错了什么,但我不断收到错误: "致命错误:解开可选值包装时意外发现 nil">

现在我明白了没有分配值,但我不明白为什么...... 这是我的代码:

-------> MainVC
struct  Ananlysys {
var descrizione: String!
var data: String!
var immagine: String!
var seganle: String!
var oraUpload: String!
var valuta: String!
}
var analysisList = [Ananlysys]()  
var alertsRef = FIRDatabase.database().reference().child("analisi")
override func viewDidLoad() {
super.viewDidLoad()
fetchDataFromDB()        
}
func fetchDataFromDB(){
alertsRef.observe(.childAdded, with: { snapshot in
if let dict = snapshot.value as? [String: AnyObject] {
let descrizione = dict["descrizione"] as! String
let data = dict["data"] as! String
let stato = dict["stato"] as! String
let immagine = dict["imageURL"] as! String
let seganle = dict["segnale"] as! String
let oraUpload = dict["oraupload"] as! String
let valuta = dict["valuta"] as! String
self.analysisList.insert(Ananlysys(descrizione: descrizione, 
data:data, immagine:immagine, seganle: seganle, oraUpload: oraUpload, 
valuta: valuta), at: 0)
self.tableView.reloadData()
}
})
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
if segue.identifier == "ItemDetailVC"{
if let indexPath = self.tableView.indexPathForSelectedRow {
let destination = segue.destination as! ItemDetailVC
let cell = tableView.cellForRow(at: indexPath) as? ItemCell
destination.valuta = (cell?.valutaLabel.text)!
destination.segnale = (cell?.signalLabel.text)!
destination.desc = (cell?.descriptionLabel.text)!
destination.immagine = (cell?.imageThumb.image)!
}
}

在My ItemDetailsVC控制器(这是目的地)中,我刚刚创建了IBoutlet。这是代码:

class ItemDetailVC: OpenAlertsVC {
@IBOutlet weak var crossLabel: UILabel!
@IBOutlet weak var signalLbl: UILabel!
@IBOutlet weak var imageDetail: UIImageView!
@IBOutlet weak var analysisDesc: UILabel!
var valuta = ""
var segnale = ""
var immagine: UIImage!
var desc = ""
}
override func viewDidLoad() {
super.viewDidLoad()
crossLabel.text = valuta
signalLbl.text = segnale
analysisDesc.text = desc
imageDetail.image = immagine
}

可能我只是在做一些愚蠢的错误... :)但这是我的第一个应用程序,我真的不知道如何弄清楚!

如果有人能帮忙,将不胜感激! :)

谢谢! 干杯!

更新: 我认为我的问题是因为形象。 我有一个网址,我以这种方式从火力基地检索:

let url = analysisList[indexPath.row].immagine

然后我下载异步图像:

cell.imageThumb.downloadImageFrom(link: url!, contentMode: 
UIViewContentMode.scaleToFill)

在续集中,我这样做:

destination.immagine = (cell?.imageThumb.image)!

在我的详细VC中:

var immagine: UIImage!
imageDetail.image = immagine

这是错误的屏幕 在此处输入图像描述

最近在视图之间传递变量。 我能够通过首先将值设置为顶级变量(选择一行时),然后在 segue prepare 函数期间重新引用该变量来让它们移动。希望这有帮助。

设置顶级变量:

var valuta: String!

将 self.tableView.indexPathForSelectedRow 部分分解为它自己的委托。 本教程就是一个很好的例子。(http://shrikar.com/swift-ios-tutorial-uisearchbar-and-uisearchbardelegate)

使用 "didSelectRowAt indexPath" 委托,设置顶级变量值。

func tableView(_ tableView: UITableView, didSelectRowAt IndexPath: IndexPath){
let cell = tableView.cellForRow(at: indexPath)!
valuta = cell?.valutaLabel.text
}

准备函数的示例调整:

override func prepare(for segue: UIStoryboardSegue, sender: Any?){ 
if segue.identifier == "ItemDetailVC"{
if let destination = 
segue.destination as? name_of_your_next_view_controller {
destination.passedValuta = valuta
}
}

确保在下一个视图中放置一个接收变量

var passedValuta: String!

相关内容

最新更新