KPath001
KPath001

Reputation: 870

Segue pushing Nothing first time(delay in data sent)

Hello StackOverflow, I'm just picking up swift and trying to implement data being passed between UITableView Cell to a UIViewController which will show a detailed view of the info shown on the tableview, and whenever I test the application on my emulator first time I press a table cell it passes an empty string and then when I try pressing another cell the viewController shows the string that was supposed to be seen earlier.I pasted the code I have for my tableview didSelectRowAtIndexPath below.

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: false)
        var7 = lat[indexPath.item]
        var6 = long[indexPath.item]
        var5 = items[indexPath.item]
        var1 = detail[indexPath.item]
        var2 = date[indexPath.item]
        var3 = wop[indexPath.item]
        var4 = ViewController()
        nextView.locationPassed = var1

        //self.performSegueWithIdentifier("DetailPush", sender: self)
        println("value stored in var1: \(var1)")
        //println("The selected indexPath is \(indexPath.item + 1)")
        println("The stored id is: \(storeSend)")
}

Here is my implementation for my push segue method

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "DetailPush"
    {
        if let crimesView = segue.destinationViewController as? ViewController {
            crimesView.locationPassed = var1
            //println("The passing address is: \(var1)")
        }
    }

}

Any idea on why I'm getting data delayed during the segue?

Thank you

Solution Found: I edited my prepareForSegue method with the following and it fixed my issue

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    //Adding the indexPath variable for the selected table Row within the segue
    var indexPath: NSIndexPath = self.tableView.indexPathForSelectedRow()!

    if segue.identifier == "DetailPush"
    {
            if let crimesView = segue.destinationViewController as? ViewController {
                //Then just pass the data corresponding to the array I created identified by the index of the selected row
                crimesView.locationPassed = self.arrayName[indexPath.row]
                println("The passing address is: \(self.addressSend)")
            }
    }


}

Upvotes: 2

Views: 659

Answers (3)

KPath001
KPath001

Reputation: 870

I found the solution by watching some online videos and all I did to fix my issue was redefine my prepareForSegue function with:

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

//Adding the indexPath variable for the selected table Row within the segue
var indexPath: NSIndexPath = self.tableView.indexPathForSelectedRow()!

if segue.identifier == "DetailPush"
{
        if let crimesView = segue.destinationViewController as? ViewController {
            //Then just pass the data corresponding to the array I created identified by the index of the selected row
            crimesView.locationPassed = self.arrayName[indexPath.row]
            println("The passing address is: \(self.addressSend)")
        }
}

}

And it seems to work like a regular segue for me.......Thank you for all the suggestions given me

Upvotes: 3

user101010
user101010

Reputation: 553

try to remove the line tableView.deselectRowAtIndexPath(indexPath, animated: false)

see if it still happens. maybe move it to the end

Upvotes: 1

Daniel Krom
Daniel Krom

Reputation: 10058

you said you are doing the prepareForSegue from async request so try this:

if segue.identifier == "DetailPush"
{
    dispatch_async(dispatch_get_main_queue()) {
        if let crimesView = segue.destinationViewController as? ViewController {
            crimesView.locationPassed = var1
            //println("The passing address is: \(var1)")
        }
    }
}

Upvotes: 2

Related Questions