Swift 3从主控制器到Firebase和Segue的视图控制器的数据
我是新来的ios dev,我正在尝试开发我的第一个应用程序! :) 到目前为止这么好... 现在我试图将数据从主控制器传递到项目详细信息视图。Swift 3从主控制器到Firebase和Segue的视图控制器的数据
我似乎无法找出什么我做错了,但我不断收到一个错误: “致命错误:意外发现零而展开的可选值”
现在我明白该值不分配,但我不明白为什么 ...这里是我的代码:
-------> 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)!
}
}
在我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
}
也许我只是做了一些愚蠢的错误... :)但它是我的第一个应用程序,我真的不知道怎么算出这个!
如果有人能帮助,那将是非常感激! :)
谢谢! 干杯!
更新: 我认为我的问题是因为图像。 我有我从火力retrive这样的URL:在SEGUE
cell.imageThumb.downloadImageFrom(link: url!, contentMode:
UIViewContentMode.scaleToFill)
我这样做::
let url = analysisList[indexPath.row].immagine
,然后我下载异步图像
destination.immagine = (cell?.imageThumb.image)!
并在我的DetailVC中:
var immagine: UIImage!
imageDetail.image = immagine
这是错误的屏幕 enter image description here
查看视图之间最近传递的变量。通过首先将该值设置为顶层变量(选中某行时),然后在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!
谢谢你们!解决了!这实际上是我所有的坏...代码工作...我忘记了在测试期间我已经改变了ItemDetailVC的声明,它不是一个UIviewController ....我笨! :d – Marco
[查看控制器之间传递数据]的可能的复制(HTTPS ://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) – Chris
你可以更具体一点,哪些线是给你的错误?如果您不知道,只需在您的代码中添加一个断点,然后逐行浏览它,直至崩溃。 – Jay
它似乎是我有图像的问题...我有一个在firebase中的网址,我检索,但它似乎我不能通过它...它给了我错误发现无 – Marco