在swift 2中委派错误

时间:2016-04-13 08:15:16

标签: swift2

我在运行App后无法传递数据。在选择表格视图单元格后,我几乎试图从前一个视图控制器更改标签 任何人都可以帮我解决错误吗?

  

查看控制器

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]()




    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 GetPassCity(){
        let actInd : UIActivityIndicatorView        = UIActivityIndicatorView(frame: CGRectMake(0,0, 50, 50)) as UIActivityIndicatorView
        actInd.center                           = self.view.center
        actInd.hidesWhenStopped                 = true
        actInd.activityIndicatorViewStyle       = UIActivityIndicatorViewStyle.Gray
        view.addSubview(actInd)
        actInd.startAnimating()

        NSURLSession.sharedSession().dataTaskWithURL(Airurl){ ( data ,response ,error) in
            if error != nil{
                print("A")
                print(error!)
            }else{

                do{
                    //readin data from Server
                    let posts   = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! [[String:AnyObject]]
                    //save data
                    for post in posts{
                        var postCity:MabdaAndMaghsad?
                        if  let  Id         = post["Id"]        as? Int     ,
                            let nameCity    = post["Name"]      as? String  ,
                            let SrcOrDst    = post["SrcOrDst"]  as? Bool
                        {
                            postCity    = MabdaAndMaghsad(ID: Id, Name: nameCity, SrcOrDst: SrcOrDst)
                        }
                        self.ScrOrDstArray.append(postCity!)

                    }

                    //===============

                    dispatch_async(dispatch_get_main_queue()){
                        actInd.stopAnimating()
                        self.originAndpurpose()
                       print(self.origin)
                        print("=======")
                     //   print(self.purpose)
                    }

                }catch let error as NSError{

                    print("B")
                    print(error)
                }
            }


            }.resume()

    }


    func sendNameToPreviousVC(SelectCity: String) {
        labelcity.text = SelectCity

    }


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

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

    }

}
  

和tableview控制器   导入UIKit   协议SendbackDelegate:class {       func sendNameToPreviousVC(城市:String)   }

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

    override func viewDidLoad() {
        super.viewDidLoad()


    }

    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
                VCOne.delegate = self


        }
    }



}

错误是第VCOne.delegate = self

错误= Value of type 'AircraftSearch?' has no member 'delegate'

1 个答案:

答案 0 :(得分:0)

该行应该是

self.delegate = VCOne

因为self是具有SelectedCity属性的delegate,而VCOne属于AircraftSearch类型,因此 a SendbackDelegate