Reputation: 1272
Im in a very deep pickle. I realize there are a good amount of SO topics regarding my error and i'v been through 3-4 pages of Google search results of those answers and have tried all the solutions. None have worked.
What Iv tried :
Problem : Iv made a segue from ViewProjectViewController to RecordModule. Then I programmatically added a bar button to the NavBar of ViewProjectViewController since that Nav bar is made programmatically from the previous VC.
Then as you can for 'item3'..that is the button I click to run the function with performSegueWithIdentifier. But when I click it I get this error:
2016-04-29 12:54:59.098 music[9298:1272742] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<music.ViewProjectViewController: 0x7bead670>) has no segue with identifier 'recMod''
*** First throw call stack:
(
0 CoreFoundation 0x00ac3494 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x02e9be02 objc_exception_throw + 50
2 UIKit 0x01b4971c -[UIViewController shouldPerformSegueWithIdentifier:sender:] + 0
3 music 0x00089ad8 _TFC5music25ViewProjectViewController13openRecModulefPs9AnyObject_T_ + 168
4 music 0x00089b4a _TToFC5music25ViewProjectViewController13openRecModulefPs9AnyObject_T_ + 58
5 libobjc.A.dylib 0x02eb00b5 -[NSObject performSelector:withObject:withObject:] + 84
6 UIKit 0x01977e38 -[UIApplication sendAction:to:from:forEvent:] + 118
7 UIKit 0x01e079da -[UIBarButtonItem(UIInternal) _sendAction:withEvent:] + 179
8 libobjc.A.dylib 0x02eb00b5 -[NSObject performSelector:withObject:withObject:] + 84
9 UIKit 0x01977e38 -[UIApplication sendAction:to:from:forEvent:] + 118
10 UIKit 0x01977db7 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 64
11 UIKit 0x01b1bf3b -[UIControl sendAction:to:forEvent:] + 79
12 UIKit 0x01b1c2d4 -[UIControl _sendActionsForEvents:withEvent:] + 433
13 UIKit 0x01b1c483 -[UIControl _sendActionsForEvents:withEvent:] + 864
14 UIKit 0x01b1b2c1 -[UIControl touchesEnded:withEvent:] + 714
15 UIKit 0x019f852e -[UIWindow _sendTouchesForEvent:] + 1095
16 UIKit 0x019f95cc -[UIWindow sendEvent:] + 1159
17 UIKit 0x0199abe8 -[UIApplication sendEvent:] + 266
18 UIKit 0x0196f769 _UIApplicationHandleEventQueue + 7795
19 CoreFoundation 0x009d5e5f __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 15
20 CoreFoundation 0x009cbaeb __CFRunLoopDoSources0 + 523
21 CoreFoundation 0x009caf08 __CFRunLoopRun + 1032
22 CoreFoundation 0x009ca846 CFRunLoopRunSpecific + 470
23 CoreFoundation 0x009ca65b CFRunLoopRunInMode + 123
24 GraphicsServices 0x05d4e664 GSEventRunModal + 192
25 GraphicsServices 0x05d4e4a1 GSEventRun + 104
26 UIKit 0x01975eb9 UIApplicationMain + 160
27 music 0x000a7391 main + 145
28 libdyld.dylib 0x040a1a25 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Heres my code ( ViewController - Starting Point of the Segue)
class ViewProjectViewController: UITableViewController {
var selectedProj: Array<String> = []
var selectedKey: String = ""
var listItemsTwo = [ListItemTwo]()
let shareDataTwo = SharedDataTwo.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
// Setup Left UIBarButton Here
self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "BackBtn"), style: .Plain, target: self, action: #selector(ViewProjectViewController.backButtonPressed(_:)))
// Setup Right UIBarButton Here
var items : Array<UIBarButtonItem> = []
let item1 = UIBarButtonItem(image: UIImage(named: "SaveBtn"),style: UIBarButtonItemStyle.Plain, target: self, action: #selector(ViewProjectViewController.saveChanges))
let item2 = UIBarButtonItem(image: UIImage(named: "EditBtn"), style: .Plain, target: self, action: #selector(ViewProjectViewController.editProject))
// SEGUE BUTTON NOT WORKING //////////////////////
let item3 = UIBarButtonItem(title: "Record", style: .Plain, target: self, action: #selector(ViewProjectViewController.openRecModule))
item3.tintColor = UIColor.redColor()
items.append(item1)
items.append(item2)
items.append(item3)
self.navigationItem.setRightBarButtonItems(items, animated: true)
item1.setTitleTextAttributes([
NSFontAttributeName: UIFont(name: "Aldrich", size: 12.0)!],
forState: UIControlState.Normal)
Heres the segue code (ViewProjectViewController)
func openRecModule(sender: AnyObject) {
self.performSegueWithIdentifier("recMod", sender: nil)
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let destinationVC = segue.destinationViewController as? RecordModule {
destinationVC.transitioningDelegate = self
}
}
Interface Builder Image - https://i.sstatic.net/h4cgh.png
How ViewProjectViewController Appeared on Screen
The MainPanelViewController directs the user to ViewProjectViewController.
The MainPanelViewController is a UIViewController with UITableView embeded inside. The code for UITableViewCell is below (which is also the segue to ViewProjectViewController)
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let keys = Array(sharedDataThree.c.keys)
let object = self.sharedDataThree.c[keys[indexPath.row]]
let newProgramVar = object as! NSArray
let destinationVC = ViewProjectViewController()
destinationVC.selectedProj = newProgramVar as! Array<String>
destinationVC.selectedKey = keys[indexPath.row]
//performSegueWithIdentifier("viewProject", sender: self)
var alreadyPushed = false
if let vc = self.navigationController?.viewControllers {
for viewController in vc {
if let viewController = viewController as? ViewProjectViewController {
self.navigationController?.popToViewController(viewController, animated: true)
print("Push your controller")
alreadyPushed = true
break
}
}
}
if alreadyPushed == false {
self.navigationController?.pushViewController(destinationVC, animated: true)
}
Upvotes: 1
Views: 2636
Reputation: 89172
Your problem is this line:
let destinationVC = ViewProjectViewController()
You didn't load it from the storyboard. There is nothing in this class that knows that you could also create it from the storyboard, so the segues are not there.
Try something like:
let sb = UIStoryboard(name: "yoursbname", bundle: NSBundle.mainBundle())
let destinationVC = instantiateViewControllerWithIdentifier("YourVcID") as?
Upvotes: 0
Reputation: 852
Try this:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "recMod" {
let destinationVC = segue.destinationViewController as? RecordModule
destinationVC.transitioningDelegate = self
}
}
Upvotes: 0