使用swift添加NSNotification Observer

时间:2015-02-16 07:51:40

标签: swift nsnotification

我正在使用this example来解释NSNotification的使用。

在我的情况下,我有一个UIViewController我有一个UITableView。对于此tableview,我通过设置我的dataSource以编程方式分配delegateUITableViewController。到目前为止,我还没有声明任何内容,因此使用简单的init()初始化我的UITableViewController。 (这个UITableViewController在StoryBoard上。)

class foo: UIViewController{
      @IBOutlet weak var fooTable: UITableView!
      var fooTableViewController = MyTableViewController()

      override func viewDidLoad(){
             super.viewDidLoad()
             fooTable.delegate = fooTableViewController
             fooTable.dataSource = fooTableViewController
      }
}

class MyTableViewController: UITableViewController {
     override func viewDidLoad(){
           super.viewDidLoad()
           NSNotificationCenter.defaultCenter().addObserver(self, selector: "notificationReceived", name: "TEST_NOTIFICATION", object: nil)
     }
}

如果我尝试在viewDidLoad()的{​​{1}}中添加观察者,则无效。

所以我的问题是:使用UIViewController是否需要使用NSNotification?如果是这样,那么在swift中使用这个init初始化的正确方法是什么?我应该如何在我的init(coder aDecoder: NSCoder)实例foo中实例化MyTableViewController?

1 个答案:

答案 0 :(得分:1)

viewDidLoad仅在加载视图控制器的视图时调用 - 在您显示的代码中,您创建了一个表视图控制器子类,将其指定为另一个表视图的数据源和委托(令人困惑,因为它已经是它自己的表视图的数据源和委托),但实际上从未对表视图控制器的视图做任何事情。

这意味着不会调用viewDidLoad

您可能应该将表视图控制器的tableView添加为子视图,并将其添加为子视图控制器,以便正确转发旋转和外观事件。

请注意,问题和答案与通知中心或Swift无关,而只是了解视图控制器的生命周期。

如果你想让一个单独的对象充当你的表视图的数据源和委托,那很好,但不要使用UITableViewController子类。只需创建一个符合数据源和/或委托协议的普通对象。