我正在使用this example来解释NSNotification
的使用。
在我的情况下,我有一个UIViewController
我有一个UITableView
。对于此tableview,我通过设置我的dataSource
以编程方式分配delegate
和UITableViewController
。到目前为止,我还没有声明任何内容,因此使用简单的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?
答案 0 :(得分:1)
viewDidLoad
仅在加载视图控制器的视图时调用 - 在您显示的代码中,您创建了一个表视图控制器子类,将其指定为另一个表视图的数据源和委托(令人困惑,因为它已经是它自己的表视图的数据源和委托),但实际上从未对表视图控制器的视图做任何事情。
这意味着不会调用viewDidLoad
。
您可能应该将表视图控制器的tableView
添加为子视图,并将其添加为子视图控制器,以便正确转发旋转和外观事件。
请注意,问题和答案与通知中心或Swift无关,而只是了解视图控制器的生命周期。
如果你想让一个单独的对象充当你的表视图的数据源和委托,那很好,但不要使用UITableViewController子类。只需创建一个符合数据源和/或委托协议的普通对象。