【发布时间】:2017-08-21 13:22:37
【问题描述】:
我正在获取 JSON 菜单,一旦 JSON 返回,我想在 SomeTableViewController 类中运行 menuReady() 以更新表格的内容。但是下面的代码似乎不起作用。
AIM:在 JSON 返回后运行 menuReady() 以更新内容。
问题: menuReady() 永远不会被触发。
SomeTableViewController.swift
class SomeTableViewController: UITableViewController, MenuModelDelegate {
override func viewDidLoad() {
menuModel.delegate = self
}
func menuReady() {
// This is NOT fired.
print("SomeViewController.menuReady()")
}
}
MenuModel.swift
protocol MenuModelDelegate : class {
func menuReady()
}
class MenuModel: NSObject {
var delegate:MenuModelDelegate?
func getMenu(data: JSON) {
// This is fired.
print("MenuModel.getMenu()")
delegate?.menuReady()
}
}
点击按钮时从 AnotherViewController 调用
AnotherViewController.swift
class AnotherViewController : UIViewController {
func buttonTapped(sender: UIButton!) {
// This function is fired.
// jsonData is some json data returned from http request
let menuModel = MenuModel()
menuModel.getMenu(data: jsonData)
}
}
【问题讨论】:
-
SomeTableViewController中的menuModel和“其他类”中的menuModel是完全相同的对象吗? -
@PhillipMills 不,它们在单独的对象中。三个不同的对象。
-
那么,您授予委托的
MenuModel对象与您调用委托方法的对象不相同? -
@PhillipMills 他们不一样。
-
你在哪里调用
getMenu(data: JSON)方法?我假设您必须在代码中的某个地方调用它来触发委托...
标签: ios swift delegates programmatically