2016-04-13 6 views
0

wenn ich die Daten aus der Valise, Tabellenansicht Controller (SelectedCity), App Absturz und Fehler machen möchte: Thread1: EXC_BAD_ACCESS (code = 1, Adresse 0x ...) Fehler ist in Zeile labelcity!.text = tit Varibale Tit nicht Problem, ich denke, das Problem liegt in der UIlabel (Labelcity)UILabel werfend Thread1: EXC_BAD_ACCESS (Code = 1, Adresse 0x ...) in Swift 2

können Sie mir helfen?

AircraftSearch

class AircraftSearch: UIViewController ,SendbackDelegate{ 

    @IBOutlet weak var Mabda: UIButton! 
    @IBOutlet weak var maghsad: UIButton! 
    @IBOutlet weak var labelcity: UILabel! 


    var Airurl = NSURL() 
    var ScrOrDstArray = [MabdaAndMaghsad]() 
    var origin = [String]() // save mabda 
    var purpose = [String]() // save maghsad 
    var sendDataToTableview = [String]() 
    var tit = String() 


    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     navigationController?.setNavigationBarHidden(false, animated: true) 
    } 


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

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func selectMabda(sender: AnyObject) { 
     sendDataToTableview = origin 
     performSegueWithIdentifier("SelectedCellSegue", sender: sender) 


    } 

    @IBAction func selectMaghsad(sender: AnyObject) { 
     sendDataToTableview = purpose 
     print(sendDataToTableview) 
     performSegueWithIdentifier("SelectedCellSegue", sender: sender) 

    } 


    func originAndpurpose() { 
     let dataCity = ScrOrDstArray 
     for i in dataCity{ 

      if i.SrcOrDst == true{ 
       origin.append(i.Name) 
      }else{ 
       purpose.append(i.Name) 
      } 
     } 
    } 
func sendNameToPreviousVC(SelectCity: String) { 
print("\(tit) selected ") //return data 

     tit = SelectCity 
     labelcity!.text = tit 

    } 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "SelectedCellSegue" { 
     if let VC = segue.destinationViewController as? SelectedCity { 

      VC.toTake = sendDataToTableview 
      VC.delegate = self 
     } 
    } 

} 

} 

SelectedCity Ansicht

import UIKit 
protocol SendbackDelegate:class { 
    func sendNameToPreviousVC(City:String) 
} 

class SelectedCity: UITableViewController { 
    var toTake = [String]() 
    var selecteCity = String() 
    weak var delegate: SendbackDelegate? = nil 

    override func viewDidLoad() { 
     super.viewDidLoad() 


    } 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     navigationController?.setNavigationBarHidden(false, animated: true) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    // MARK: - Table view data source 


    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     // #warning Incomplete implementation, return the number of sections 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     // #warning Incomplete implementation, return the number of rows 
     return toTake.count ?? 0 

    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("stcell", forIndexPath: indexPath) as? mAndMCell 

     let nameCity = toTake[indexPath.row] 
     print(nameCity) 

     cell!.nameCityLabel.text = nameCity 
     return cell! 
    } 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){ 

     let indexPath = tableView.indexPathForSelectedRow! 
     let currentCell = tableView.cellForRowAtIndexPath(indexPath) as! mAndMCell! 

     selecteCity = currentCell.nameCityLabel!.text as String! 

     sendBackIdCity(selecteCity) 
     navigationController?.popViewControllerAnimated(true) 



    } 
    func sendBackIdCity(name: String){ 
     self.delegate?.sendNameToPreviousVC(name) 

    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     if segue.identifier == "backCitySegue"{ 
      var VCOne = segue.destinationViewController as? AircraftSearch 
      self.delegate = VCOne 


     } 
    } 

} 
+0

Sie erklärt, dass die Variable "tit" (die viel bewirken wird der Belustigung unter den unreifen Lesern) ist nicht das Problem, so dass ich das offensichtlich vermuten würde. – gnasher729

+0

nein Ich teste ohne tit, aber ist nicht gelöst – Shadow

+0

Das mag sich albern anhören, aber hast du tatsächlich jemals das IBOutlet in der Ansicht gekoppelt? Auch das 'UILabel()' ist redundant. Es ist bereits optional, es wurde bereits initiiert und stürzt daher nicht ab, wenn ein Nullwert gefunden wird. Es sei denn, du entpackst es natürlich mit '!', Was du getan hast. –

Antwort

0

Statt

@IBOutlet weak var labelcity: UILabel? = UILabel() 

Versuch:

@IBOutlet weak var labelcity: UILabel! 
+0

Diese Antwort sollte Ihr Problem beheben –

+0

Nein, ist nicht gelöst – Shadow

+0

Sie verbinden das Etikett aus dem Storyboard, richtig? –

0

Betrachten schwach Schlüsselwort in der Deklaration von Eigenschaften zu entfernen. Die Verwendung dieses Schlüsselworts verhindert, dass das gerade erstellte UILabel-Objekt beibehalten wird. Daher wird das Objekt sofort freigegeben.

var labelcity: UILabel? = UILabel() 

Oder eine andere Option ist Objektinstanziierung in viewDidLoad Methode zu bewegen:

var labelcity: UILabel! 
... 
override func viewDidLoad() { 
    super.viewDidLoad() 
    let label = UILabel() 
    //you code for subview adding into view controller's view 
    labelcity = label 
    GetPassCity() 
} 
+0

Amman hat mehr zu erklären? – Shadow

+0

Haben Sie das Problem behoben? Haben Sie versucht, ** schwach ** Schlüsselwort in der Eigenschaftserklärung zu entfernen? –

0

ich das Problem gelöst:

override func viewDidLoad() { 
     super.viewDidLoad() 
     labelcity.text = tit 
     GetPassCity() 
    } 


func sendNameToPreviousVC(SelectCity: String) { 
      tit = SelectCity 
     } 
Verwandte Themen