2016-06-06 2 views
0

У меня есть 3 контроллера вида (Dialer, Audio и Call View Controller), Dialer и Audio только подключены к макетам и вызывают его вызовом через аудио просмотр. Когда я нажимаю на callButton в контроллере просмотра набора, я должен передать значение CallViewController а затем напрямую вызовите AudioViewController, у которого есть StoryBoardID (AudioViewController), но я не знаю, что эта строка возвращает null, поэтому я не могу перейти к AudioViewController.Мгновенный просмотр контроллера с идентификатором возврата nil?

callViewController = storyboard?.instantiateViewControllerWithIdentifier("AudioCallViewController") as! AudioCallViewController 

Полный код:

Dialer Вид:

class DialerViewController: UIViewController,UITextFieldDelegate { 



@IBOutlet weak var progNameLabel: UILabel! 
@IBOutlet weak var progNumberLabel: UILabel! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "onConnectionStatusNotification:", name: NOTIFICATION_PHONE_EVENT, object: nil) 

} 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    navigationController?.setNavigationBarHidden(true, animated: false) 
    UIDevice.currentDevice().proximityMonitoringEnabled = false 
} 



@IBAction func makeCallButton(sender: AnyObject) { 



    let ownNumber = AppDelegate.sharedInstance().phone?.config().regUser 
    if !ownNumber!.isEmpty || progNumberLabel.text != ownNumber { 

     var callViewController: CallViewController? 

      callViewController = storyboard?.instantiateViewControllerWithIdentifier("AudioCallViewController") as! AudioCallViewController  //Exception in this line 


     callViewController?.number = progNumberLabel.text 
     //self.presentedViewController(callViewController, animated:true, completion:nil) 
     navigationController?.pushViewController(callViewController!, animated: true) 
    } 


} 



func onConnectionStatusNotification(notification: NSNotification) { 
    let status = PhoneEvents(rawValue: notification.object!.integerValue) 
    let _ = status! == .RegSuccess 
} 



deinit { 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
} 

} 

CallView:

class CallViewController: UIViewController, UITextFieldDelegate { 

var number: String? 
var callId: Int? 
var incoming: Bool? 

override func viewDidLoad() { 
    super.viewDidLoad() 
    print("The Number is" + number!) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "onConnectionStatusNotification:", name: NOTIFICATION_PHONE_EVENT, object: nil) 
} 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 
    navigationController?.setNavigationBarHidden(true, animated: false) 
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "onCallNotification:", name: NOTIFICATION_CALL_EVENT, object: nil) 


} 

func closeView() { 
    if self == navigationController?.topViewController { 
     navigationController?.popViewControllerAnimated(true) 
    } 
} 

func onCallNotification(notification: NSNotification) { 

} 

func onConnectionStatusNotification(notification: NSNotification) { 

} 



deinit { 
    NSNotificationCenter.defaultCenter().removeObserver(self) 
} 

} 

AudioViewController:

class AudioCallViewController: CallViewController { 

............. 

    } 

ответ

0
callViewController = storyboard?.instantiateViewControllerWithIdentifier("AudioCallViewController") as! AudioCallViewController  //Exception in this line 

В выше, вы не объявить, что storyboard есть, так что это определенно вернет нулевой

по умолчанию, ваша раскадровка должна быть Main, поэтому добавьте в этом коде как раз над этим утверждением

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
+0

Я попробую и ответю вам снова –

+0

дайте мне знать, если это сработает! – Chris

+0

Нет, это не сработало! –