UIViewController 委托或 DataModel Class?
UIViewController Delegate of DataModel Class?
我想要一个 UIViewController 作为 DataModel 的委托。
在我的数据模型中,当我实例化它时,从 parse 中延迟加载数据,这基本上发生在应用程序委托的 applicationDidBecomeActive(application: UIApplication)
函数中,在我的数据模型中,我通过 [=15 获取 Parse 对象=] 功能。
我希望在成功块中调用委托。
我想知道是否可以制作数据模型的 UIViewController 委托?如果是,有任何例子。
这就是我目前正在做的事情 -
在应用程序委托中 -
class AppDelegate: UIResponder, UIApplicationDelegate {
let dataModel = DataModel()
func applicationDidBecomeActive(application: UIApplication) {
dataModel.handleFirstTime()
}
}
在数据模型中 Class -
protocol DataModelDelegate:class{
func dataDidLoad(controller:DataModel)
func dataHaveError(controller:DataModel)}
class DataModel {
weak var delegate:DataModelDelegate?
var dataApplied = [PFObject]()
func handleFirstTime(){
let appliedQuery = PFQuery(className: "DummyClass")
appliedQuery.findObjectsInBackgroundWithBlock({ (success, error:NSError?) -> Void in
if error != nil {
print(error?.userInfo)
}else{
dataApplied = success!
self.delegate?.dataDidLoad(self)
print(dataApplied.count)
}
})
}
}
在我的 ViewController -
class tableViewController: UITableViewController,DataModelDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let dataModel:DataModel = DataModel()
dataModel.delegate = self
}
func dataDidLoad(controller: DataModel) {
print("TableView Reload trigger")
tableView.reloadData()
}
//There are other TableView Controller related methods
}
好吧,你的代码乍一看没问题。但是这里的问题是您将视图控制器委托设置在 DataModel
.
的不同对象上
您需要确保您没有在 tableViewController
中创建 DataModel
的另一个对象,并使用您在 AppDelegate
中创建的相同对象,因为那是您使用的对象触发您的 handleFirstTime()
功能。
因此,您的 table 控制器正在监视对象 2,而在您的 handleFirstTime()
中,正在调用对象 1 的委托。
附带说明一下,如果您从多个地方访问此对象,也可以尝试使用单例 DataModel
。
我想要一个 UIViewController 作为 DataModel 的委托。
在我的数据模型中,当我实例化它时,从 parse 中延迟加载数据,这基本上发生在应用程序委托的 applicationDidBecomeActive(application: UIApplication)
函数中,在我的数据模型中,我通过 [=15 获取 Parse 对象=] 功能。
我希望在成功块中调用委托。 我想知道是否可以制作数据模型的 UIViewController 委托?如果是,有任何例子。
这就是我目前正在做的事情 -
在应用程序委托中 -
class AppDelegate: UIResponder, UIApplicationDelegate {
let dataModel = DataModel()
func applicationDidBecomeActive(application: UIApplication) {
dataModel.handleFirstTime()
}
}
在数据模型中 Class -
protocol DataModelDelegate:class{
func dataDidLoad(controller:DataModel)
func dataHaveError(controller:DataModel)}
class DataModel {
weak var delegate:DataModelDelegate?
var dataApplied = [PFObject]()
func handleFirstTime(){
let appliedQuery = PFQuery(className: "DummyClass")
appliedQuery.findObjectsInBackgroundWithBlock({ (success, error:NSError?) -> Void in
if error != nil {
print(error?.userInfo)
}else{
dataApplied = success!
self.delegate?.dataDidLoad(self)
print(dataApplied.count)
}
})
}
}
在我的 ViewController -
class tableViewController: UITableViewController,DataModelDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let dataModel:DataModel = DataModel()
dataModel.delegate = self
}
func dataDidLoad(controller: DataModel) {
print("TableView Reload trigger")
tableView.reloadData()
}
//There are other TableView Controller related methods
}
好吧,你的代码乍一看没问题。但是这里的问题是您将视图控制器委托设置在 DataModel
.
您需要确保您没有在 tableViewController
中创建 DataModel
的另一个对象,并使用您在 AppDelegate
中创建的相同对象,因为那是您使用的对象触发您的 handleFirstTime()
功能。
因此,您的 table 控制器正在监视对象 2,而在您的 handleFirstTime()
中,正在调用对象 1 的委托。
附带说明一下,如果您从多个地方访问此对象,也可以尝试使用单例 DataModel
。