Segue Error:ViewController没有带标识符的segue

时间:2016-04-29 19:58:04

标签: ios swift

我是一个非常深的泡菜。我意识到有很多关于我的错误的SO主题,并且我已经通过3-4页这些答案的Google搜索结果并尝试了所有解决方案。没有人工作过。

我尝试了什么:

  1. 重置模拟器设置
  2. 清理Xcode构建文件
  3. 重命名故事板
  4. 检查识别出的segue是否拼写错误(数百次)
  5. 重新启动并重建xCode项目
  6. 确保segue实际上与错误中的ViewController相关联。
  7. 问题:Iv从 ViewProjectViewController 转到 RecordModule 。然后我以编程方式向 ViewProjectViewController 的NavBar添加了一个条形按钮,因为该条形图是从上一个VC以编程方式创建的。

    然后你可以选择' item3' ..这就是按钮,我点击运行带有performSegueWithIdentifier的函数。但是当我点击它时,我收到了这个错误:

    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
    

    继承我的代码(ViewController - 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)
    

    继承了segue代码(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图像 - http://i.imgur.com/klbwdrm.png

    ViewProjectViewController如何在屏幕上显示

    MainPanelViewController 将用户定向到 ViewProjectViewController

    MainPanelViewController 是一个 UIViewController ,其中嵌入了 UITableView UITableViewCell 的代码如下(也是 ViewProjectViewControlle r的代码)

    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)
            }
    

2 个答案:

答案 0 :(得分:0)

试试这个:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "recMod" {
        let destinationVC = segue.destinationViewController as? RecordModule 
        destinationVC.transitioningDelegate = self
    }
}

答案 1 :(得分:0)

你的问题就在这一行:

   let destinationVC = ViewProjectViewController()

您没有从故事板加载它。这个类中没有任何东西知道你也可以从故事板创建它,所以segues不在那里。

尝试类似:

 let sb = UIStoryboard(name: "yoursbname", bundle: NSBundle.mainBundle())
 let destinationVC = instantiateViewControllerWithIdentifier("YourVcID") as?