0

Я хочу передать данные. Вид на B, он может создавать и отображать данные в представлении A, но после того, как я выбрал ячейке, он разбился. И это показывает проблему с кодом.Swift 3 передают данные ячейки. Вид на B, с удовольствием сделалSelectRowAt indexPath сбой после выбора строки

vcTwo.selectedzones.zones = [selectedCity]

fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)

мой код

Режим структура:

struct Location { 
    var city: String! 
    var zones = [String]() 
} 
var city = ["KHT", "TPAP", "TNNY"] 

let kh = Location.init(city: "KHT", zones: ["sami", "zami", "zomi", "komi", "shini"]) 
let tpa = Location.init(city: "TPAP", zones: ["mid", "east", "anci", "zochi"]) 
let tnn = Location.init(city: "TNNY", zones: ["TN1","TN2", "TN3", "TN4", "TN5"]) 

Вот код ViewController:

import UIKit 

class FirstViewTableViewController: UITableViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    // MARK: - Table view data source 

    override func numberOfSections(in tableView: UITableView) -> Int { 

     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return city.count 
    } 

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! FirstCell 

      cell.firstLabel.text = city[indexPath.row] 

      return cell 
    } 



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


     let selectedCity = city[indexPath.row] 
     let vcTwo = self.storyboard?.instantiateViewController(withIdentifier: "secondVC") as! secondViewController 
     vcTwo.selectedzones.zones = [selectedCity] 

     self.navigationController?.pushViewController(vcTwo, animated: true) 

    } 
} 

Б ViewController:

import UIKit 

class secondViewController: UITableViewController { 

    var selectedzones: Location! 


    override func viewDidLoad() { 
     super.viewDidLoad() 

    } 

    override func numberOfSections(in tableView: UITableView) -> Int { 

     return 1 
    } 

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

     return selectedzones.zones.count 
    } 

Есть ли какая-либо часть неправильно в FUNC didSelectRowAt indexPath?

ответ

0

здесь проблема

 vcTwo.selectedzones.zones = [selectedCity] 

вам необходимо инициализировать selectedZone в первом контроллере

 let kh = Location.init(city: "KHT", zones: ["sami", "zami", "zomi", "komi", "shini"]) 

    vcTwo.selectedzones = kh 
+0

спасибо !! Он не будет сбой теперь ~, но все еще не может передать данные в Bview, после того как я выбрал строку. Он делает что-нибудь. no crash no switch to next Вид –

+0

Включите местоположение в первом контроллере с полными данными. он пройдет мимо – junaidsidhu

+0

извините, я так новичок в программировании !!! вы имеете в виду «var location = [Location]()» над func viewDidLoad() в первом представлении? или все мое местоположение Struct –

0

Попробуйте

class secondViewController: UITableViewController { 

    var selectedzones = Location() 
} 

вы попытаться Accesss zones но не выделять Location поэтому он будет врезаться. Надеюсь, что это поможет вам

+0

спасибо за предложение !! –

0

Вместо Опционно! использовать Дополнительно?

+0

спасибо за совет !! оба они могут показать вид A, но B, но это нормально, я буду продолжать работать над этим! ваше предложение заставляет меня учиться больше, круто и ценить его. –

Смежные вопросы