2016-04-10 16 views
0

Bir protokol oluşturmak ve iki denetleyiciyi boş bırakmaya ikna etmek için birkaç öğretici ve stackoverflow sorusunu takip etmeyi denedim. Çabuk olmak için oldukça yeniyim, bu yüzden çalışmayanlardan emin değilim. Bir ana kullanıcı arabirim denetleyicim ve onun içine gömülü bir ubleview denetleyicisi var. Ebeveynine bilgi göndermek için uitableviewcontroller'a ihtiyacım var. Bu kod açısından ne var: Şu andaUIviewcontroller ve uitableviewcontroller arasında iletişim kurmak için Swift temsilci

//Parent ViewController 

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

ve

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

temsilci .sendMessage() değil yürütülmekte olan?. Delegenin sıfır olduğunu ve asla kurulmadığını farz ediyorum. Gördüğüm bazı öneriler, temsilci üst görünüm denetleyicisinde ayarlanması gerektiğini söylüyor. Ben benim ana viewcontroller değiştirmeyi denediniz:

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

Bu kod derler ama ölümcül hatanın bir çalışma zamanı hatası vardır: İsteğe Bağlı değerini unwrapping ederken beklenmedik nil bulundu

+0

'" Sanırım "' - neden emin olmak için hata ayıklayıcısını kullanmak yerine neden bir şey varsayıyorsunuz? – nhgrif

cevap

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

Tüm temsilci ile iyi görünüyor iletişim. secondViewController.delegate = self'u çalıştırmadan önce secondViewController'ın başlatıldığından emin olun, bu hataya neden olabilir.

İlgili konular