gpt4 book ai didi

swift - 使用 prepareForSegue 时 indexPathForSelectedRow 错误

转载 作者:搜寻专家 更新时间:2023-11-01 06:43:47 25 4
gpt4 key购买 nike

我正在尝试用我的 MySQL 数据库中的一些产品(使用 PHP POST 文件)填充 tableView,目前一切正常,但是当我选择“Cell”时,prepareForSegue 被触发,但是 indexPathForSelectedRow是错误的,所以它显示的是不同的产品。

这是我的完整代码,我希望你能告诉我一些事情,因为我不知道为什么会这样,我已经尝试了很多东西,但我别无选择......!

TableViewController.swift

import UIKit

class ListadoBuscarResultadosTableViewController: UITableViewController {

var option: String = ""

var productos = [Producto]()

var refreshControl2:UIRefreshControl!

var imageCache = [String:UIImage]()

override func viewDidLoad() {

super.viewDidLoad()

requestPost()

title = self.option

tableView.allowsMultipleSelection = true

tableView.scrollsToTop = true

self.tableView.reloadData()
}

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

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

func refresh(sender:AnyObject) {

requestPost()

self.refreshControl2.endRefreshing()
}

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

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// Return the number of sections.
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// Return the number of rows in the section.
return productos.count
}

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

// Define the initial state (Before the animation)
cell.alpha = 0.25

// Define the final state (After the animation)
UIView.animateWithDuration(1.0, animations: { cell.alpha = 1 })
}

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

// try to reuse cell
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! BuscarCellTableViewCell

cell.selectionStyle = .None

//cell.nombre.text = productos[indexPath.row].nombre
//cell.marca.text = productos[indexPath.row].marca

//println(cell.nombre.text)

// get the deal image
let currentImage = productos[indexPath.row].imagen
let unwrappedImage = currentImage
var image = self.imageCache[unwrappedImage]
let imageUrl = NSURL(string: productos[indexPath.row].imagen)

// reset reused cell image to placeholder
cell.imagen.image = UIImage(named: "")

// async image
if image == nil {

let request: NSURLRequest = NSURLRequest(URL: imageUrl!)

NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in
if error == nil {

image = UIImage(data: data)

self.imageCache[unwrappedImage] = image
dispatch_async(dispatch_get_main_queue(), {
cell.imagen.image = image
cell.nombre.text = self.productos[indexPath.row].nombre
cell.marca.text = self.productos[indexPath.row].marca
})
}
else {
cell.nombre.text = self.productos[indexPath.row].nombre
cell.marca.text = self.productos[indexPath.row].marca
}
})
}

else {
cell.imagen.image = image
cell.nombre.text = self.productos[indexPath.row].nombre
cell.marca.text = self.productos[indexPath.row].marca
}

return cell

}

func requestPost () {

let request = NSMutableURLRequest(URL: NSURL(string: "http://www.web.es/productos_by_category.php")!)
request.HTTPMethod = "POST"
let postString = "category="+option
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in

if error != nil {
//println("error=\(error)")
return
}

let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)!
// JSON RESULTADO ENTERO
//println("responseString = \(responseString)")

self.productos = self.parseJsonData(data)

// Reload table view
dispatch_async(dispatch_get_main_queue(), {
self.tableView.reloadData()
})
}
task.resume()
}

func parseJsonData(data: NSData) -> [Producto] {
var productos = [Producto]()
var error:NSError?

let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as? NSDictionary

// Return nil if there is any error
if error != nil {
println(error?.localizedDescription)
}

// Parse JSON data
let jsonProductos = jsonResult?["lista_productos"] as! [AnyObject]
for jsonProducto in jsonProductos {

let producto = Producto()
producto.nombre = jsonProducto["nombre"] as! String
producto.imagen = jsonProducto["imagen"] as! String
producto.marca = jsonProducto["marca"] as! String
producto.distribuidor = jsonProducto["distribuidor"] as! String
producto.linea = jsonProducto["linea"] as! String
producto.precio = jsonProducto["precio"] as! String

productos.append(producto)
}

return productos
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if segue.identifier == "verProducto" {
if let indexPath = self.tableView.indexPathForSelectedRow() {
let destinationController = segue.destinationViewController as! MarcaProductoViewController
//println(productos[indexPath.row].nombre)
println(indexPath)
destinationController.nombre = productos[indexPath.row].nombre
}
}
}

提前致谢

问候。

最佳答案

试试这种方式...

 if segue.identifier == "verProducto"{  
if let indexPath = tableView.indexPathForCell(sender as! BuscarCellTableViewCell){
var detailsVC = segue.destinationViewController as! MarcaProductoViewController
}
}

关于swift - 使用 prepareForSegue 时 indexPathForSelectedRow 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32717984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com