2016-04-10 7 views
0

私はプロトコルをセットアップし、2つのビューコントローラの間で無駄に委任するために、いくつかのチュートリアルとスタックオーバーフローに関する質問を試しました。私はかなり新しくて迅速なので、私は何がうまくいかないのか分からない。私はメインのuiviewcontrollerとそれに埋め込まれたuitableviewcontrollerを持っています。私は親に情報を返すためにuitableviewcontrollerが必要です。 )今委任.sendMessageを(uiviewcontrollerとuitableviewcontrollerの間で通信するSwift代理人

//Parent ViewController 

class parentViewController: UIViewController, childViewControllerDelegate { 
    func sendMessage(controller: childViewController, text: String) { 
     print("Sent message: " + text) 
    } 
} 

//Child ViewController 

protocol childViewControllerDelegate: class { 
    func sendMessage(controller: childViewController, text: String) 
} 

class childViewController: UITableViewController { 
    weak var delegate: childViewControllerDelegate? 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     if (indexPath.row == 0) { 
     delegate?.sendMessage(self, text: "Hello Parent") 
     } 
    } 
} 

実行されていません:?これは私がコードの面で持っているものです。デリゲートは無制限で、決して設定しないと仮定します。私が見たいくつかの提案では、親ビューコントローラに代理人を設定する必要があります。このコードはコンパイルされますが、致命的なエラーのランタイムエラーを持っている

//Parent ViewController 

class parentViewController: UIViewController, childViewControllerDelegate { 
    weak var secondViewController: childViewController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     secondViewController.delegate = self 

    } 

    func sendMessage(controller: childViewController, text: String) { 
     print("Sent message: " + text) 
    } 
} 

+0

'' ''私は仮定します - どうしてあなたは確かにデバッガを使うのではなく何かを仮定していますか? – nhgrif

答えて

0
//Child ViewController 

protocol childViewControllerDelegate: class { 
    func sendMessage(controller: childViewController, text: String) 
} 

class childViewController: UITableViewController { 
    weak var delegate: childViewControllerDelegate? 

    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     if (indexPath.row == 0) { 
      delegate?.sendMessage(self, text: "Hello Parent") 
     } 

    } 

    func applyDelegate(mainDelegate : childViewControllerDelegate){ 
     self.delegate = mainDelegate 
    } 
} 


//Parent ViewController 

class parentViewController: UIViewController, childViewControllerDelegate { 
    weak var secondViewController: childViewController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     secondViewController.applyDelegate(self) 

    } 

    func sendMessage(controller: childViewController, text: String) { 
     print("Sent message: " + text) 
    } 
} 

をオプションの値をアンラップしながら、予想外にnilを見つけすべてはあなたのデリゲートで正常に見える私はに私の親のViewControllerに変更しようとしてきましたコミュニケーション。 secondViewController.delegate = selfを実行する前にsecondViewControllerが初期化されていることを確認してください。このエラーが発生する可能性があります。

関連する問題