Swift没有传递正确的变量值

时间:2016-05-02 08:23:03

标签: json xcode swift

好的,我是Swift的新手,我遇到了在URL中传递变量的问题。 我们的想法是单击按钮,传递产品ID,然后在下一个视图控制器上显示与特定产品ID相关的信息。

它不断传递数组中的最后一个id,而不是我点击的那个。

我使用了print(product_id_as)来查看id是否被正确检索,并且没有问题。

我正在使用表视图来显示来自外部数据库的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 个答案:

答案 0 :(得分:0)

为按钮提供一个选择器,并将indexPath.row指定为按钮标记。 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到下一个视图控件。