2016-04-29 3 views
1

Im в очень глубоком рассоле. Я понимаю, что есть хорошая информация о моей ошибке, и я прошел через 3-4 страницы результатов поиска Google по этим ответам и пробовал все решения. Никто не работал.Ошибка Segue: ViewController не имеет идентификатора

Что Iv пробовал:

  1. Сброс Simulator Настройки
  2. Вычищают Xcode сборочные файлы
  3. Rename раскадровки
  4. Проверьте, чтобы увидеть, если Segue идентифицированный не написано неправильно (в сотни раз)
  5. Перезапустить и перестроить проект xCode
  6. Убедитесь, что segue на самом деле связан с ViewController в erro р.

Проблема: Iv сделал переход от ViewProjectViewController к RecordModule. Затем я программным образом добавила кнопку панели в NavBar ViewProjectViewController, так как эта панель Nav сделана программно из предыдущего 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 

Heres мой код (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 
    } 



} 

Интерфейс Builder Изображение - http://i.imgur.com/klbwdrm.png

Как ViewProjectViewController Появившись на экране

MainPanelViewController направляет пользователя к ViewProjectViewController.

MainPanelViewController является UIViewController с UITableView Embeded внутри. Код для UITableViewCell ниже (который также является переход к ViewProjectViewControlle г)

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

Открыть раскадровка файл в обычном текстовом редакторе и искать «recMod» - убедитесь, что он выглядит так, как вы думаете, он должен (вложен в нужном месте). Если вы не можете понять это, я думаю, вы можете бросить его в суть и связать его здесь. –

+1

Также, как вы получили ViewProjectViewController на экране? Вы перешли к нему? Вы загрузили его из раскадровки, верно? –

+0

Я помню, что такая странная проблема. Вы пробовали «Чистое создание папки»? Команда + Option + Shift + K сделает это. – James

ответ

0

Попробуйте это:

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

Это действительно выглядит как readyForSegue еще не вызывается - он не может найти segue вообще. –

+0

Спасибо @Jitendra Я пробовал это с той же ошибкой! – brkr

+0

Пожалуйста, отлаживайте свой код и посмотрите, где именно происходит ошибка. Пожалуйста, поделитесь описанием ошибки из журнала. Если вы получаете ту же ошибку, что и в вопросе. Попробуйте удалить/удалить segue, а затем снова добавить segue в контроллер и указать другое имя для него; измените его и в коде. Затем проверьте, работает ли он или нет – Jitendra

0

Ваша проблема эта линия:

let destinationVC = ViewProjectViewController() 

Вы не загрузили его из раскадровки.В этом классе нет ничего, кто знал бы, что вы также можете создать его из раскадровки, так что сегов там нет.

Попробуйте что-то вроде:

let sb = UIStoryboard(name: "yoursbname", bundle: NSBundle.mainBundle()) 
let destinationVC = instantiateViewControllerWithIdentifier("YourVcID") as? 
Смежные вопросы