2017-08-28 3 views
0

Ich habe zwei VCs und ich versuche, Daten von der ersten VC zu der zweiten über ein Segment zu übergeben. Der erste VC hat eine Tabellenansicht. Jede Zelle enthält einen Titel und eine Beschreibung, die unter Verwendung von Kerndaten gespeichert werden. Ich möchte eine Detailansicht jeder Zelle in der zweiten VC haben. Ich habe zwei Zeichenfolgen initialisiert, um die Werte von der ersten VC zu speichern, und sie den Zeichenfolgen in der zweiten VC zugewiesen.Fehler beim Übergeben von Daten zwischen VC

Bitte nehmen Sie sich einen Blick auf den Code unten:

var SelectedTitle = String() 
var SelectedDisc = String() 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    SelectedTitle = self.listAthkar[indexPath.row].title! 
    print(SelectedTitle) 
    SelectedDisc = self.listAthkar[indexPath.row].details! 
    print(SelectedDisc) 
    performSegue(withIdentifier: "showCell", sender: self) 
} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (segue.identifier == "showCell") { 
     var destinationVC = segue.destination as! showCellVC 
     destinationVC.passedTittle = SelectedTitle 
     destinationVC.passedDisc = SelectedDisc 
    } 
} 


class showCellVC: UIViewController { 

var passedTittle = String() 
var passedDisc = String() 
@IBOutlet weak var cellTitle: UILabel! 
@IBOutlet weak var cellDisc: UITextView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    cellTitle.text = passedTittle 
    cellDisc.text = passedDisc 
    print("Title Passed is \(passedTittle)") 
    print("Discription Passed is \(passedDisc)") 
} 

Wenn ich der App, die Konsole druckt testen:

Title Passed is 
Discription Passed is 
title 
Description 

Hier ist ein Bild von der aktuellen Zelle

Cell picture Irgendeine Idee, warum es die Daten nicht an die zweite VC weitergibt?

+0

Ein paar Vorschläge, aber zuerst, Ihr Code ist ein bisschen anders als meins, aber es * sieht aus * wie es funktionieren sollte. (1) Verschieben Sie Ihre Druckanweisungen in das 'prepare (for sequences: sender:)' und machen * save * die ersten VC-Variablen korrekt. (2) Zeigen Sie uns - oder überprüfen Sie sich selbst - ob das Segment korrekt in IB, Tippfehlern oder etwas anderem eingerichtet ist. (3) Eine weitere Überprüfung besteht darin, sicherzustellen, dass Sie den zweiten VC ordnungsgemäß instanziieren - erwägen Sie, Ihren Code in 'zu ändern, wenn das Ziel vC = segue.destination als? showCellVC' und übergeben Sie die Variablen innerhalb dieses if. – dfd

+0

Bitte verwenden Sie die Swift-Namenskonvention, die für Variablennamen niedriger Camelcase ist. –

+0

print (SelectedTitle) In didSelectetRowAt hat einen Require-Wert? –

Antwort

3

Es sieht aus wie Sie einen action segue auf Ihrer Tableview Zelle in Ihrem Storyboard gesetzt haben. Da Sie einen programmatischen Übergang verwenden, wollen Sie das nicht. Der Aktionsabschnitt wird vor Ihrer didSelect-Methode ausgelöst, sodass der Übergang vor der Festlegung der Variablen erfolgt.

+0

Vielen Dank. Ich löschte das Segment aus der Zelle und legte es in den View-Controller und es funktionierte. –

0

Versuchen Sie so! Tätigen Sie Array für „Titel“ und „Beschreibung“

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 

    self.performSegue(withIdentifier: "showCell", sender: indexPath) 
} 

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

    if (segue.identifier == "showCell") { 
    var destinationVC = segue.destination as! showCellVC 
    destinationVC.passedTittle = self.listAthkar[(sender as! IndexPath).row] 
    destinationVC.passedDisc = self.listAthkar[(sender as! IndexPath).row] 
    } 
} 
Verwandte Themen