繁体   English   中英

Swift:Tableview和Search Bar在第一次使用segue发送空对象

[英]Swift: Tableview and Search Bar send null object on first time with segue

我有一个带有搜索栏的tableview。 搜索方法还可以,效果很好。 我对didSelectRowAtIndexPath部分有问题。

当我选择一个列表项(单元格)时,需要将其通过segue传递到下一场景。

但是当我选择一个单元格以显示项目详细信息时;

第一选择:空对象, 第二选择:第一对象, 第三选择:第二对象传递到下一场景。

我的车辆类别:

class Vehicle {
    var owner : String 
    var plate : String 
    var location : String 
    var isOnline : String 
    var state : String 
    var speed : String 
    var driver : String 
    var maxSpeed : String
    var dailyOverSpeed : String 
    var energy : String 
    var firstEngineDate : String 
    var messageDate : String 
    var dailyKm : String 
    var totalMoving : String 
    var totalWaiting : String 
    var totalParking : String 
    var totalKm : String 


    init() {
        self.owner = ""
        self.plate = ""
        self.location = ""
        self.isOnline = ""
        self.state = ""
        self.speed = ""
        self.driver = ""
        self.maxSpeed = ""
        self.dailyOverSpeed = ""
        self.energy = ""
        self.firstEngineDate = ""
        self.messageDate = ""
        self.dailyKm = ""
        self.totalMoving = ""
        self.totalWaiting = ""
        self.totalParking = ""
        self.totalKm = ""
    }

    init(owner: String, plate: String, location: String, isOnline: String, state: String, speed: String, driver: String, maxSpeed: String, dailyOverSpeed: String, energy: String, firstEngineDate: String, messageDate: String, dailyKm: String, totalMoving: String, totalWaiting: String, totalParking: String, totalKm: String) {
        self.owner = owner
        self.plate = plate
        self.location = location
        self.isOnline = isOnline
        self.state = state
        self.speed = speed
        self.driver = driver
        self.maxSpeed = maxSpeed
        self.dailyOverSpeed = dailyOverSpeed
        self.energy = energy
        self.firstEngineDate = firstEngineDate
        self.messageDate = messageDate
        self.dailyKm = dailyKm
        self.totalMoving = totalMoving
        self.totalWaiting = totalWaiting
        self.totalParking = totalParking
        self.totalKm = totalKm
    }
}

我的tableview控制器:

class VehiclesTableViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate, UISearchDisplayDelegate{
...
    var vehicles = [Vehicle]()
    var filteredVehicles = [Vehicle]()
    var selectedVehicle = Vehicle()
.....
}

didSelectRowAtIndexPath

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

        if (tableView == self.tableView) {
            self.selectedVehicle = vehicles[indexPath.row]
        } else {

            self.selectedVehicle = filteredVehicles[indexPath.row]
        }


        println(self.selectedVehicle.plate)

    }

prepareForSegue

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == "DisplayViewSegue" {
            var nextScene  =  segue.destinationViewController as! DisplayViewController
            nextScene.currentVehicle = self.selectedVehicle


        }
    }

当我选择任何单元格(带有搜索或不带有搜索)时,我的println()会在didSelectRowAtIndexPath中起作用。 困惑?

听起来您可能将搜索栏作为表格视图的顶部元素,所以当您从车辆数组访问元素时,它必须为indexPath.row-1。 另外,如果仅在选择行时进行查找,则可以使用self.tableview.indexPathForSelectedRow()直接访问索引,并使用它来获取适当的工具,希望这可以解决您的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM