I have 2 classes, the first class is named "store" where I create a button which calls a method: "storeSelected" located in the second class with the name ExploreViewController
.
The method should print "done" and take me to another view controller.
Without the segue "done" is printed but when putting the segue code the app crashes.
The error is:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<Glam.ExploreViewController: 0x14ed3be20>) has no segue with identifier 'ok''
.........
// ExploreViewController Class
let _sharedMonitor: ExploreViewController = { ExploreViewController() }()
class ExploreViewController: UIViewController, UIScrollViewDelegate {
class func sharedMonitor() -> ExploreViewController {
return _sharedMonitor
}
func storeSelected(sender: UIButton) {
println("done") // it entered here and "done" is printed
self.performSegueWithIdentifier("ok", sender: self) //here is the problem
}
}
// another class named "Store"
// button is created
let monitor = ExploreViewController.sharedMonitor()
btn.addTarget(monitor, action: Selector("storeSelected:"), forControlEvents: UIControlEvents.TouchUpInside)
Assuming that you have a view controller where you create the
Store
object - you should pass the button action back to this view controller and add a segue from it to your desired destination.Best practice is to use a protocol that delegates the buttons action back up to the viewController that it is contained in as below.
Store.swift
ViewController.swift
This code is untested, but I hope you get the idea - your
Store
object delegates the button press activity back to its containingViewController
and then the ViewController carries out the segue that you have attached to it in the Storyboard.