0

I tried to pass data from one controller to another using segue method. My first viewcontroller is

class ViewController: UIViewController {

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        if (segue.identifier == "btnSubmitSegue") {
            var svc = segue.destinationViewController as ForthViewController;
            svc.dataParsed = "this is new text"
        }
    }
}

In Destination view controller ->

class ForthViewController: UIViewController {

    @IBOutlet weak var mylabel1: UILabel!
    var dataParsed:String!

    override func viewDidLoad() {
        super.viewDidLoad()
        NsLog(dataParsed)
        mylabel1.text =  dataParsed

    }
}

but data is not load to mylabel1.text in destination controller. Can you pls help to figure out

nhgrif
  • 61,578
  • 25
  • 134
  • 173
  • Try move the code to viewDidAppeare method – Greg Apr 22 '15 at 10:08
  • What does the NSLog log? (Btw, you should use the swift function `println()`.) – dasdom Apr 22 '15 at 10:09
  • 3
    is your (segue.identifier == "btnSubmitSegue") condition true? missspelling identifiers is common mistake for me – Pavel Smejkal Apr 22 '15 at 10:12
  • What does the printed data say? Does it print correct? Nextime use println() instead of NSLog – Dejan Skledar Apr 22 '15 at 10:18
  • possible duplicate of [How do you share data between view controllers and other objects in Swift?](http://stackoverflow.com/questions/29734954/how-do-you-share-data-between-view-controllers-and-other-objects-in-swift) – nhgrif Apr 27 '15 at 00:02

3 Answers3

0

You will must write following code in one table view controller

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "show" {
        if let indexPath = self.tableView.indexPathForSelectedRow() {
            let object = self.fetchedResultsController!.objectAtIndexPath(indexPath) as! NSManagedObject
            let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController //DetailViewController
                controller.detailItem = object
                println(object)
        }
    }
}

and in second view controller

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    configureView()
   }


    var detailItem: AnyObject? {
    didSet {
        // Update the view.
        self.configureView()
    }
}

func configureView() {
    // Update the user interface for the detail item.
    if let detail: AnyObject = detailItem {
        if var textView = self.text {
            textView.text! = detail.valueForKey("mynote")!.description
        }

    }
}

I hope that I helped to you.

Alexsander
  • 43
  • 6
0

Try that:

class FirstViewController: UIViewController {

    private var myStringData = "This is my Data"

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        var destView: SecondViewController = segue.destinationViewController as! SecondViewController
        destView.data = myStringData
    }
}

them your destination view controller:

class SecondViewController: UIViewController {

    var data: String?

    @IBOutlet weak var labelWhereDataWillAppear: UILabel!

    override func viewDidLoad() {
        labelWhereDataWillAppear.text = data!
        print("\(data!)")
    }
}
Marco
  • 314
  • 4
  • 9
0
  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {


   if segue.identifier == "currencySegue"{

        let controller = segue.destinationViewController as! SubmitDropMenuDetailedTableViewController
        controller.currencyId = Int(self.currencyTypeId)
        controller.entity = "Currency"
        controller.delegate = self
    }
    else if segue.identifier == "categorySegue"{
        let controller = segue.destinationViewController as! SubmitDropMenuDetailedTableViewController
        controller.entity = "Category"
        controller.categoryId = Int(expenseTypeId)
        controller.delegate = self
    }
}