Swift не передает правильное значение переменной

Хорошо, я новичок в Swift, и у меня есть проблема с передачей переменной в URL.
Идея состоит в том, чтобы нажать на кнопку, Передать идентификатор продукта и на следующем контроллере представления для отображения информации, относящейся к конкретному идентификатору продукта.

Он продолжает передавать последний идентификатор в массиве, а не тот, на который я нажал.

Я использовал print (product_id_as), чтобы увидеть, если идентификаторы извлекаются правильно, и нет никаких проблем.

Я использую табличное представление для отображения данных JSON из внешней базы данных.
Это код, который я использую для отображения данных.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! SpecialCell
    let maindata = values[indexPath.row]
    cell.product.text = maindata["product"] as? String
    product_id = (maindata["id"] as? String)!
    product_id_as = Int(product_id)!
    buttonTitle = (maindata["product_id"] as? String)!
    cell.testButton.setTitle(buttonTitle, forState: .Normal)

    func renewQuestions(sender : UIButton) {

        let url = NSURL(string: "http://initiateaustralia.com.au/initiate/vq.php?product=(product_id_as))")
        let data = NSData(contentsOfURL: url!)
        values = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray

    }
    return cell;
}

1 ответ

  1. Укажите селектор для кнопки и назначьте indexPath.строка как кнопки тег. RenewQuestions будет селектором вашей кнопки. Мы будем двигаться, что и с помощью тега мы будем извлекать данные на кнопку нажмите

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! SpecialCell 
    let maindata = values[indexPath.row]
    cell.product.text = maindata["product"] as? String
    product_id = (maindata["id"] as? String)! 
    product_id_as = Int(product_id)!  
    buttonTitle = (maindata["product_id"] as? String)!  
    cell.testButton.setTitle(buttonTitle, forState: .Normal) 
    cell.testButton.addTarget(self, action:#selector(ViewController.renewQuestions(_:)), forControlEvents:UIControlEvents.TouchUpInside)
    cell.testButton.tag = indexPath.row
    return cell; 
    }
    
    
    func renewQuestions(sender : UIButton) {
     let selectedItem = sender.tag
    let selectedData = values[selectedItem]
    let selectedProduct_id = (selectedData["id"] as? String)! 
    let selectedProduct_id_as = Int(selectedProduct_id)! 
    let url = NSURL(string: "http://initiateaustralia.com.au/initiate/vq.php?product=\(selectedProduct_id_as))")
    let data = NSData(contentsOfURL: url!) values = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSArray 
    }
    

    Теперь выполните segue к следующему элементу управления представления.