2017-08-27 4 views
-1

Ich habe eine Tabellenansicht und ich möchte Zellendetails in einem anderen View-Controller anzeigen.Übergeben von Informationen an neue Ansicht Controller

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let selectedCell = listAthkar[indexPath.row] 
    let destinationVC = showCellVC() 
    destinationVC.cellTitle.text = selectedCell.title 
    destinationVC.cellDisc.text = selectedCell.details 
    performSegue(withIdentifier: "showCell", sender: self) 
} 

showCellVC hat eine UILabel und eine textview, die ich möchte, um Daten zu übergeben, die Daten kommen aus Kerndaten. Die App stürzt jedes Mal ab, wenn ich eine Zelle drücke. Hier

ist der Fehler, den ich bekommen

fatal error: unexpectedly found nil while unwrapping an Optional value 2017-08-27 02:46:29.315056-0400 AthkarKF[13152:3972483] fatal error: unexpectedly found nil while unwrapping an Optional value

Der Fehler denke ich, ist selbsterklärend, aber ich bin nicht sicher, wo der optionale Wert ist, und ich bin mir nicht sicher, ob dies der richtige Weg ist, Daten an einen anderen VC übergeben.

Können Sie bitte helfen, ich würde es wirklich zu schätzen wissen.

+2

https://stackoverflow.com/questions/32170456/what-does-fatal-error-unerwartet-gefunden-nil-while-unwrapping-an-optional-wert https://stackoverflow.com/questions/29734954/how-do-you-share-data-between-view-view- Controller-und-andere-Objekte-in-Swift. Willkommen bei SO. Khalid, bitte stellen Sie sicher, dass Sie nach Threads suchen, bevor Sie die Fragen stellen. Wenn es nicht hilft, kannst du die Frage posten und uns sagen, warum die Lösungen nicht funktionieren und es wird einfacher sein, dir zu helfen, als Duplikate zu posten. :) GL. –

+2

Sie müssen die Daten in 'prepareForSegue' Methode nicht in' tableView: didSelectRow' übergeben, Zeigen Sie Ihre 'prepareForSegue' Methode –

Antwort

0

Was Sie tun sollten, ist, die gewünschten Daten über prepareForSegue:sender: Methode zu übergeben. Man könnte dies achive durch die folgenden Schritte ausführen:

1- Deklarieren selectedCell als Instanzvariable in den ganzen View-Controller zugänglich zu sein:

// for sure you'll need to declare its data type... 
var selectedCell:... 

2- Remove "Übergeben von Daten" Code aus tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) Delegatmethode, alles, was Sie tun müssen, ist die segue auszuführen:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    selectedCell = listAthkar[indexPath.row] 
    performSegue(withIdentifier: "showCell", sender: self) 
} 

3- Implementieren prepareForSegue:sender: und übergibt die Daten durch sie:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // you may need to check the segue identifier in case of your view controller contains multiple segues 
    if segue.identifier == "showCell" { 
     let destinationVC = segue.destination as! showCellVC() 
     destinationVC.cellTitle.text = selectedCell.title 
     destinationVC.cellDisc.text = selectedCell.details 
    } 
} 


Im allgemeinen sollte das Endergebnis ähnlich sein:

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    // STEP #01: 
    // for sure you'll need to declare its data type... 
    var selectedCell:... 

    // STEP #02: 
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
     selectedCell = listAthkar[indexPath.row] 
     performSegue(withIdentifier: "showCell", sender: self) 
    } 

    // STEP #03: 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     // you may need to check the segue identifier in case of your view controller contains multiple segues 
     if segue.identifier == "showCell" { 
      let destinationVC = segue.destination as! showCellVC() 
      destinationVC.cellTitle.text = selectedCell.title 
      destinationVC.cellDisc.text = selectedCell.details 
     } 
    } 
} 
+0

lassen Sie ZielVC = segue.destination als! showCellVC() 'als! showCellVC 'oder' as! showCellVC() '? –

+0

@OmniRingo Ich wusste nicht, was der Unterschied ist. Wie auch immer, angenommen, dass 'showCellVC()' einen * valid * UIViewController zurückliefern sollte, sollte es 'destinationVC = segue.destination als! showCellVC() '. –

Verwandte Themen