2015-11-17 1 views
0

У меня есть rootviewcontroller, который я использую для подкласса всех моих контроллеров представления, в этом есть протокол с методом, который я пытаюсь выполнить с помощью контроллера представления. как такМетод протокола не будет выполняться в другом контроллере представления

Root View Controller

protocol RootControllerDelegate: class { 

    func refreshTheTable(sender: AnyObject) 

} 

class RootViewController: UIViewController { 

    weak var rootDelegate : RootControllerDelegate? 
} 

так я есть кнопка с IBAction в одном из моих контроллеров зрения, которые предполагают, чтобы огонь функцию делегата.

View Controller, чтобы запустить функцию

// You can see here I'm subclassing the root view controller 

class FiltersViewController: RootViewController, UITableViewDataSource, UITableViewDelegate { 

     @IBAction func doneButtonDidTouch(sender: AnyObject) { 

     rootDelegate?.refreshTheTable(sender) 
     dismissViewControllerAnimated(true, completion: nil) 

    } 
} 

Таким образом, в этой точке зрения контроллера я настроил делегата в viewdidAppear, а также называется функцией просто напечатать что-то на данный момент только для целей тестирования, но ничего случается.

View Controller, где функция должна выполнять

class TopStoriesViewController: RootViewController, UITableViewDataSource, UITableViewDelegate, ReminderViewControllerDelegate, DZNEmptyDataSetDelegate, DZNEmptyDataSetSource, RootControllerDelegate { 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(false) 

     rootDelegate = self 
    } 


    func refreshTheTable(sender: AnyObject) { 
     print("dsdsdsds") 
    } 
} 

Но ничего, кажется, происходит ... Когда я его отладки, а она даже не выполняет функцию, а

ответ

0

У вас есть два класса и два разных назначенных делегата.

  • Первый класс, FiltersViewController, который должен сгореть метод делегата , имеет ноль. Поэтому ничто не предназначено для обработки этого метода.

  • Второй класс, TopStoriesViewController, который должен обрабатывать метод
    , имеет делегата. Но в этом классе вы не называете методы делегата, вы вызываете их в классе FiltersViewController.

Вы должны установить TopStoriesViewController (который имеет методы делегата реализованы) в качестве делегата от FiltersViewController (который запускает методы делегата). Из вашего кода делегат, назначенный в TopStoriesViewController, не требуется.